`
hold_on
  • 浏览: 456197 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

android:descendantFocusability

 
阅读更多

  开发中很常见的一个问题,项目中的listview不仅仅是简单的文字,常常需要自己定义listview,自己的Adapter去继承BaseAdapter,在adapter中按照需求进行编写,问题就出现了,可能会发生点击每一个item的时候没有反应,无法获取的焦点。原因多半是由于在你自己定义的Item中存在诸如ImageButton,Button,CheckBox等子控件(也可以说是Button或者Checkable的子类控件),此时这些子控件会将焦点获取到,所以常常当点击item时变化的是子控件,item本身的点击没有响应。

    这时候就可以使用descendantFocusability来解决啦,API描述如下:

android:descendantFocusability

Defines the relationship between the ViewGroup and its descendants when looking for a View to take focus.

Must be one of the following constant values.

 

该属性是当一个为view获取焦点时,定义viewGroup和其子控件两者之间的关系。

属性的值有三种:

        beforeDescendants:viewgroup会优先其子类控件而获取到焦点

        afterDescendants:viewgroup只有当其子类控件不需要获取焦点时才获取焦点

        blocksDescendants:viewgroup会覆盖子类控件而直接获得焦点

 

通常我们用到的是第三种,即在Item布局的根布局加上android:descendantFocusability=”blocksDescendants”的属性就好了,至此listview点击的灵异事件告一段落。心得:遇到不会不懂的地方除了网上查询资料之外,也可以多多去尝试每种属性的作用,多阅读官方文档(我始终觉得还是读原文的比翻译的理解的会更好)。

分享到:
评论

相关推荐

    android:descendantFocusability方法介绍

    在Android开发中,`android:descendantFocusability`是一个非常重要的属性,特别是在处理包含多个可聚焦子视图的自定义视图组,如ListView、RecyclerView等列表组件时。这个属性控制了视图组如何处理其子视图的焦点...

    android descendantFocusability用法简析

    android descendantFocusability用法简析

    Android-ListView中嵌套(ListView)控件兼容问题

    在子`ListView`的XML布局文件中,为其最外层的`LinearLayout`或类似的容器添加属性`android:descendantFocusability="blocksDescendants"`。这个属性的作用是阻止子视图获取焦点,从而避免它们拦截触摸事件,确保...

    【Android】ListView与Button的共存问题解决

    3. **事件冲突解决**:通过设置`android:descendantFocusability`和`android:focusable`属性,防止子View(如Button)拦截点击事件。 4. **自定义ListView**:如果默认的处理方式仍然不能满足需求,可以考虑自定义...

    安卓开发过程中总结的一些案例

    # ShopCart 案例 ## 截图 ![购物车](screenshots/shopcart.png) ... * recycleview 添加 android:descendantFocusability="beforeDescendants";activity 添加 android:windowSoftInputMode="stateHidden|adjust

    listView和scrollView焦点冲突问题

    android:descendantFocusability="blocksDescendants"这句,并固定listview的高度属性(如:android:layout_height="220dp")。覆盖住scrollview的焦点,使scrollview不能滑动,listview可以滑动,并确保listview的...

    更改TimePicker和DatePicker样式

    android:descendantFocusability="blocksDescendants" /> ``` 然后在Java代码中设置NumberPicker的值和回调: ```java NumberPicker numberPicker = findViewById(R.id.number_picker); numberPicker.setMinValue...

    ListVeiw适配器工具类+焦点抢占+convertView复用导致内容错乱

    3. 对于焦点抢占问题,可以调整ListView的焦点策略,如设置`android:descendantFocusability="beforeDescendants"`,使得ListView优先获取焦点,或者`android:descendantFocusability="blocksDescendants"`,防止子...

    NumberPicker简易Demo

    `android:descendantFocusability`属性防止NumberPicker获取焦点,这样可以避免键盘弹出,保持纯滚动交互。 接下来,我们需要在Java代码中初始化和配置NumberPicker。首先通过findViewById找到对应的NumberPicker...

    listview的子控件焦点问题

    android:descendantFocusability="afterDescendants"/> ``` 这样设置后,ListView将不会抢占其子控件的焦点,从而使得子控件能够在适当的时候获取焦点。 ### 解决方案三:检查子控件的clickable属性 除了...

    listview响应优先

    综上所述,在Android开发中,如果希望`ListView`能够优先响应点击事件,而不是其子视图,可以通过调整子视图的`focusable`属性以及设置`descendantFocusability`属性为`blocksDescendants`来实现。这样既保证了用户...

    使用ViewDragHelp实现ImageView拖动超过屏幕1/2回到屏幕左边,否则到右边,还有一个就是还能实现点击的效果

    在布局文件中,确保`ImageView`的父容器允许`ViewDragHelper`进行操作,可以通过设置`android:descendantFocusability="blocksDescendants"`来实现: ```xml android:layout_width="match_parent" android:...

    Android自定义ListView单击事件失效的解决方法

    使用android:descendantFocusability="blocksDescendants"属性可以解决Android自定义ListView单击事件失效的问题,但需要注意的是,这个属性只能在ListView的item布局中生效,而不能在ListView的根目录中生效。

    EditText属性详解

    `android:focusableInTouchMode`和`android:descendantFocusability`也是在`ListView`中使用`EditText`时需要注意的属性。它们控制`EditText`是否能在触摸模式下获得焦点,以及子视图如何处理焦点。 总结来说,`...

    Android 中ListView setOnItemClickListener点击无效原因分析

    前言 最近在做项目的过程中,在使用listview的时候遇到了设置item监听事件的时候在没有回调onItemClick 方法的问题。我的情况是在item中有一...2、在item最外层添加属性 android:descendantFocusability=”blocksDesce

    android PickerView源码.rar

    - `android:descendantFocusability`:设置子视图的获取焦点能力,如“beforeDescendants”,“afterDescendants”,“blocksDescendants”。 四、PickerView的数据适配器 PickerView通常使用`ArrayAdapter`或...

    android有用代码片段.

    android:descendantFocusability="blocksDescendants" ... <!-- 或者在ListView中添加 --> listView.setOnItemClickListener(new AdapterView.OnItemClickListener() { @Override public void onItemClick...

    listview中editText的焦点问题

    android:descendantFocusability="beforeDescendants" /> ``` 2. **实现ListView的OnItemSelectedListener**:监听ListView的选择事件,当用户选择一个包含EditText的列表项时,主动给予EditText焦点。 ```java ...

    TextView滚动,跑马灯效果终极解决方案

    在这种情况下,可以尝试使用`android:descendantFocusability="blocksDescendants"`属性阻止内部滚动。 5. **文本更新**:如果TextView的文本是在运行时动态更新的,需要确保更新后重新启动跑马灯,可以通过`...

    SlidingMenu+ViewPage+ListView嵌套(类似网易 ) ListView点击事件失效冲突问题解决

    6. **使用`android:descendantFocusability`属性**:在`ListView`的父布局中设置`android:descendantFocusability="blocksDescendants"`,阻止父布局拦截子视图的焦点。 7. **设置`clickable`和`focusable`为false*...

Global site tag (gtag.js) - Google Analytics