Skip to content
wswenyue edited this page Oct 14, 2015 · 1 revision

##与视图焦点相关的属性及方法 ###对于视图 方法:

方法描述 在普通模式下 在触摸模式下
设置view接受焦点的资格 setFocusable() setFocusableInTouchMode()
获取view是否有接受焦点的资格 isFocusable() isFocusableInTouchMode()
请求获取焦点 requestFocus() requestFocusFromTouch()

对应的xml属性: android:focusable="" true或false android:focusableInTouchMode="" true或false

###对于视图组控件 还有一个属性和方法用来控制焦点 xml中的属性:

android:descendantFocusability=""
属性参数 意义
beforeDescendants viewgroup会优先其子类控件而获取到焦点
afterDescendants viewgroup只有当其子类控件不需要获取焦点时才获取焦点
blocksDescendants viewgroup会覆盖子类控件而直接获得焦点即禁止子控件获取焦点

方法:

view.setDescendantFocusability()
参数:ViewGroup.FOCUS_AFTER_DESCENDANTS
	     ViewGroup.FOCUS_BEFORE_DESCENDANTS
	     ViewGroup.FOCUS_BLOCK_DESCENDANTS

##对于上面的了解我们解决遇到的问题 ###解决ListView中CheckBox抢焦点的问题

问题描述:

ListView item中包含CheckBox、Button等之类(EditText除外,这个复杂点,在下面有解决),这些子控件默认有获取焦点的能力,视图组控件中如果包含有获取焦点能力的子控件,那么焦点会自动转移到该子控件上。并且由于每一个Window只拥有一个焦点,点击事件的触发,前提是该控件有焦点,所以视图组控件的点击将不会被触发。

解决方法: 第一种方案: 给视图组控件设置属性:

android:descendantFocusability="blocksDescendants"

第二种方案: 给具有抢夺焦点能力的子控件设置属性:

android:focusable="false"
android:focusableInTouchMode="false"

###解决ListView中EditText获取不到焦点的问题 为了使listView的点击事件和EditText的点击编辑输入都有效我们不能简单的设置EditText获取焦点等方法解决 需要在ListView的item选择事件中处理

首先在listView的xml文件中配置

android:descendantFocusability="beforeDescendants"

其次在监听事件中处理焦点:

listView.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
        @Override
        public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {
            //设置视图组ListView让出焦点
            listView.setDescendantFocusability(ViewGroup.FOCUS_AFTER_DESCENDANTS);
            EditText editText = (EditText) view.findViewById(R.id.cart_total_text);
            //EditText 请求获取焦点
            editText.requestFocus();

        }

        @Override
        public void onNothingSelected(AdapterView<?> parent) {
            //设置视图组ListView获取焦点
            listView.setDescendantFocusability(ViewGroup.FOCUS_BEFORE_DESCENDANTS);
        }
    });

越努力,越幸运


我的简书笔记

我的麦库分享

我的微博


梦想还是要有的

Clone this wiki locally