今天想改下ListView的滑动块,我手机是4.1系统的,滑动块又细又长,感觉不太好看。可我按着网上的去改,死活就是没改成功,不知是啥原因,代码如下
try {
Field f = AbsListView.class.getDeclaredField("mFastScroller");
f.setAccessible(true);
Object o = f.get(listView);
f = f.getType().getDeclaredField("mThumbDrawable");
f.setAccessible(true);
Drawable drawable = (Drawable) f.get(o);
drawable = getResources().getDrawable(R.drawable.ic_launcher);
f.set(o, drawable);
} catch (Exception e) {
throw new RuntimeException(e);
}
配置文件的ListView
<ListView
android:id="@+id/listView"
android:layout_width="fill_parent"
android:layout_height="0dip"
android:layout_weight="1"
android:background="@color/white"
android:choiceMode="singleChoice"
android:scrollbars="vertical"
android:scrollbarStyle="insideInset"
android:fastScrollEnabled="true"
android:soundEffectsEnabled="true"
android:minHeight="32dip"
android:dividerHeight="0.2dip"
android:divider="@drawable/horizontal_separation_line"
android:layout_marginLeft="10dip"
android:visibility="visible"/>
转载自http://blog.sina.com.cn/s/blog_6c762bb301018off.html
mListView.setSelector(null);//空指针
试试下面这种:
mListView.setSelector(newColorDrawable(Color.TRANSPARENT));
ListView需要在初始化好数据后,其中一项需要呈选中状态。所谓"选中状态"就是该项底色与其它项不同,setSelection(position)只能定位到某个item,但是无法改变底色呈高亮。setSelection(position)只能让某个item显示在可见Item的最上面(如果Item超过一屏的话)!就是所谓的firstVisibleItem啦!
如果想要实现效果可以在listview所绑定的adapter里的getView函数里去完成一些具体的工作。可以记下你要高亮的那个item的index,在getView函数里判断index(也就是position),如果满足条件则加载不同的背景。
2.每個listview都有無效的位置,如第一行的前一行,最後一行的後一行,這個無效的位置是一個常量.
3.有時我們需要在程序中通過點擊按鈕來控制ListView行的選中,這就用到了在程序中如何使用代碼來選擇ListView項.
4.
5. 如何保持ListView的滾動條一直顯示,不隱藏呢:
6.ListView本身有自己的按鍵事件,即你不需要設置方向鍵的標識,按下方向鍵ListView就會有默認的動作,那如何進行控制,編寫自己的onKey呢,你需要在Activity中重寫dispatchKeyEvent(KeyEventevent);方法,在這裡面定義你自己的動作就可以了
/>
<shapexmlns:android="http://schemas.android.com/apk/res/android">
</shape>
//listview.setSelector(R.drawable.thisShape);
在Adapter中重写public boolean isEnabled(intposition)方法,将其返回false就可以了,推荐采用此种办法,具体见http://gundumw100.iteye.com/admin/blogs/850654
}
首先是stackFromBottom属性,这只该属性之后你做好的列表就会显示你列表的最下面,值为true和false
android:stackFromBottom="true"
第二是transciptMode属性,需要用ListView或者其它显示大量Items的控件实时跟踪或者查看信息,并且希望最新的条目可以自动滚动到可视范围内。通过设置的控件transcriptMode属性可以将Android平台的控件(支持ScrollBar)自动滑动到最底部。
android:transcriptMode="alwaysScroll"
第三cacheColorHint属性,很多人希望能够改变一下它的背景,使他能够符合整体的UI设计,改变背景背很简单只需要准备一张图片然后指定属性android:background="@drawable/bg",不过不要高兴地太早,当你这么做以后,发现背景是变了,但是当你拖动,或者点击list空白位置的时候发现ListItem都变成黑色的了,破坏了整体效果。
如果你只是换背景的颜色的话,可以直接指定android:cacheColorHint为你所要的颜色,如果你是用图片做背景的话,那也只要将android:cacheColorHint指定为透明(#00000000)就可以了
第四divider属性,该属性作用是每一项之间需要设置一个图片做为间隔,或是去掉item之间的分割线android:divider="@drawable/list_driver"
第五fadingEdge属性,上边和下边有黑色的阴影android:fadingEdge="none"设置后没有阴影了~
第五scrollbars属性,作用是隐藏listView的滚动条,android:scrollbars="none"与setVerticalScrollBarEnab
第六fadeScrollbars属性,android:fadeScrollbars="true"
这时候需要注意使用
gallery.setCallbackDuringFling(false)
如何让ListView自动滚动?
注意stackFromBottom以及transcriptMode这两个属性。类似Market客户端的低端不断滚动。
/>
//全选遍历ListView的选项,每个选项就相当于布局配置文件中的RelativeLayout
for(inti= 0; i < listView.getChildCount();i++){
}
我们通常需要ListView中某一项选中时,他的字体颜色和原来的不一样。 如何设置字体的颜色呢?在布局文件中TextColor一项来设置颜色,但是不是只设置一种颜色,而是在不同的条件下设置不同的颜色: 下面是个例子:
<selectorxmlns:android="http://schemas.android.com/apk/res/android">
<itemandroid:state_enabled="false"android:color="@color/orange"></item>
<itemandroid:state_window_focused="false"android:color="@color/orange"></item>
<itemandroid:state_pressed="true"android:color="@color/white"></item>
<itemandroid:state_selected="true"android:color="@color/white"></item>
<itemandroid:color="@color/orange"></item>
</selector>
<!--在获取焦点或者选中的情况下设置为白色,其他情况设置为橘黄色。
所有基于ListView或者说AbsListView实现的widget控件均可以通过下面的方法设置行间距的分割线,分割线可以自定义颜色、或图片。
在ListView中我们使用属性android:divider="#FF0000"定义分隔符为红色,当然这里值可以指向一个drawable图片对象,如果使用了图片可能高度大于系统默认的像素,可以自己设置高度比如6个像素android:dividerHeight="6px",当然在Java中ListView也有相关方法可以设置。
ListView不通过notifyDataSetChanged()更新指定的Item
Listview一般大都是通过notifyDataSetChanged()來更新listview,但通过notifyDataSetChanged()会把界面上现实的的item都重绘一次,这样会影响ui性能。
可以通过更新指定的Item提高效率,伪代码如下:
}
定义了一个listView,并为他设置了setOnCreateContextMenuLi
有时希望的是有些长按时能弹出contextMenu,有些不能。解决这个问题的办法是为这个listView设置setOnItemLongClickListen
intposition,longid){
}
ListView底部分隔线的问题