一.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);
}
}