Android ListView 特殊属性及用法

时间:2022-11-02 16:46:02

一.ListView的一些特殊属性:

 

1.android:fadingEdge="none"     //去掉ListView最上边和最下边黑色的阴影

2.android:scrollbars="none"       //隐藏ListView的滚动条

3.android:fadeScrollbars="true"  //设置为true就可以实现滚动条的自动隐藏和显示

4.android:dividerHeight="2dip"   //两个item之间的距离

5.android:divider="@drawable/driver_bg"   //设置item之间分割线的图片资源(Item之间无间隙android:divider="#00000000")

6.android:listSelector="#00000000 "              //选中item时的颜色。默认为橙黄底色(依手机系统而定)

7.android:background="@drawable/bg"       //指定图片资源为背景色(用到它时,必须使用属性8,去除拖动时黑块)

8.android:cacheColorHint="#00000000"        //背景色为透明,防止拖动时黑块

9.android:scrollingCache="false"                       //去除拖动时ListView背景为黑色

10.android:stackFromBottom="true"            //设置为true时,你做好的列表就会显示你列表的最下面

11.android:transcriptMode="alwaysScroll"   //当你动态添加数据时,列表将自动往下滚动最新的条目可以自动滚动到可视范围内

12.android:fastScrollEnabled = "true"            //ListView出现快速滚动的按钮(至少滚动4页才会显示)

13.android:drawSelectorOnTop="false"        //点击某条记录不放,颜色会在记录的后面成为背景色,内容的文字可见(缺省为false)

14.android:headerDividersEnabled="false"  //设成flase时,此ListView将不会在页眉视图前画分隔符。缺省值为true(页脚视图同理)

15.android:soundEffectsEnabled="false"    //点击和触摸时是否有声音效果,缺省值为true(只有系统设置中开启了触摸提示音才有效)

 

二. 解决ListView item中含有Button或者Checkable的子类控件点击时冲突

 

 由于在你自己定义的Item中存在诸如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会覆盖子类控件而直接获得焦点

 

所以解决办法:1.在Item布局的根布局加上android:descendantFocusability=”blocksDescendants”的属性。

                                 2.在当前ListView的xml里添加android:descendantFocusability=”blocksDescendants” 在item的xml里的Button添加android:focusable="false"的属性。

 

 

三.listview的item点击事件会使里面的Button也出现按压的效果

两个方案:1:放弃listview的onItemClickedListener()。listview.setOnItemClickedListener(null);

                  2:使用自定义的Button,判断他的父控件是否press,如果是就把这个事件消耗掉,不向下传递即可;

                

import android.content.Context;
import android.util.AttributeSet;
import android.view.View;
import android.widget.Button;

public class CustomButton extends Button {
public CustomButton(Context context) {
super(context);
}

public CustomButton(Context context, AttributeSet attrs) {
super(context, attrs);
}

public CustomButton(Context context, AttributeSet attrs, int defStyle) {
super(context, attrs, defStyle);
}

@Override
public void setPressed(boolean pressed) {
if (pressed && getParent() instanceof View && ((View) getParent()).isPressed()) {
return;
}
super.setPressed(pressed);
}

}


 

 

 

参考:http://blog.sina.com.cn/s/blog_7033e38201016bu3.html

参考:http://www.cnblogs.com/eyu8874521/archive/2012/10/17/2727882.html