C# 控件隐藏还能否获取焦点

 我来答
376710727
2017-03-27 · TA获得超过8937个赞
知道大有可为答主
回答量:2593
采纳率:100%
帮助的人:1238万
展开全部
看你的“获取”是如何定义的。

在WPF和Winform中, 如果一个控件visibility = hidden时,其默认的获取焦点为False。
打个比方, 页面上有3个TextBox(1,2,3), 正常情况下,光标在第一个Textbox1时, 按下Tab键,焦点会自动切换到Textbox2上。当Textbox2隐藏后,按下Tab键,光标会切到Textbox3上去,而不会给隐藏控件焦点。

但是你手动去设置某个已经被隐藏的控件Focused = true,也不会报错。只是完全没有用罢了。
如果你设置了某个隐藏的控件Focused = true; 然后去找当前界面的焦点时, 系统会报空引用异常。
还是上面的3个Textbox,当你把Textbox2隐藏且手动设置为焦点时, 第一次按下Tab键, 系统内部会报错(界面上没有反应),第二次按下Tab时, 焦点自动切到TextBox1上,第三次按Tab,焦点切换到TextBox3.
匿名用户
2017-03-27
展开全部
在机顶盒开发中会遇到这样的需求,listview上的item项中有一张图片(item里的ImageView子控件),当按下机顶盒遥控器的方向键时(例如方向键的下键),让listview的某一个item项里面的图片(如下图左边的ImageView)获得焦点,而不是让item自身获得焦点(下图右)。

默认的情况下,是listview的item自身获得了焦点(如上图右),也就是说listview的item获得焦点后,没有传递给子控件或者子控件默认不能获得焦点。
这时候我们可能会想到在布局文件里设置listview的descendantFocusability属性(焦点传递性):android:descendantFocusability="afterDescendants"
然而无论设置其值为afterDescendants还是beforeDescendants或blocksDescendants都没有达到想要的效果。
接下来我们可能会继续寻找listview是否有以item为关键字的相关属性,结果很遗憾,找遍了所有属性都没有item相关的关键字。

其实与item相关的设置在配置文件里面虽然没有,但是代码里还是有的,如下:
listView.setItemsCanFocus(true); //设置item项的子控件能够获得焦点(默认为false,即默认item项的子空间是不能获得焦点的)
通过这一行代码即可实现以上需求,另外,关于焦点的传递大家有兴趣的话可以自行查看源码。

补充:如果没有出现左图的获得焦点高亮效果,可能有以下原因:
1,ImageView默认不能获得焦点,应该设置属性为:android:focusable="true" (如果是ImageButton或Button等则不需要设置,他们默认是可以获得焦点的)
2,没有为该ImageView设置自定义drawable图片的的selector(该ImageView其实已经获得焦点了,只是没有看出来而已)。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式