Android本身的ListView其实已经提供了比较丰富的功能,但在实际设计应用的时候,需要根据公司独有的风格来进行设置,所以总需要自己来做一些变化。今天说到的一个问题,就是ListView的item为TextView的时候,如何根据焦点所在来改变背景。
我们都知道,ListView的内容是用Adapter来设置的,所以当时我的第一选择就是重写一个Adapter,在getView方法中来根据当前焦点位置进行设置,但很遗憾,也很莫名其妙的是,如果ListView中的item数量不超过当前屏幕,也就是不需要下拉的时候,完全没问题,但如果item比较多,焦点就无法向屏幕下方移动,这个问题我测试了好久也不知道是为什么,无奈就只能另辟奇径了。
思路来源于本来项目中的其他模块的代码,在layout布局文件中有这样的属性:
android:background="@drawable/textview_background"
然后再textview_background.xml文件中,则有一个<selector>,里面写着2个item,分别是有焦点(android:state_focused)和无焦点的时候来设置背景。照葫芦画瓢,我也在自己的模块中这样写 绝世唐门,但结果依然悲剧。
无意间,自己输入了android:之后,eclipse给出了提示,在提示中有这样的属性:android:state_selected,会不会应该改成这个呢?试试吧,结果就是成功了!
我们都知道,ListView的内容是用Adapter来设置的,所以当时我的第一选择就是重写一个Adapter,在getView方法中来根据当前焦点位置进行设置,但很遗憾,也很莫名其妙的是,如果ListView中的item数量不超过当前屏幕,也就是不需要下拉的时候,完全没问题,但如果item比较多,焦点就无法向屏幕下方移动,这个问题我测试了好久也不知道是为什么,无奈就只能另辟奇径了。
思路来源于本来项目中的其他模块的代码,在layout布局文件中有这样的属性:
android:background="@drawable/textview_background"
然后再textview_background.xml文件中,则有一个<selector>,里面写着2个item,分别是有焦点(android:state_focused)和无焦点的时候来设置背景。照葫芦画瓢,我也在自己的模块中这样写 绝世唐门,但结果依然悲剧。
无意间,自己输入了android:之后,eclipse给出了提示,在提示中有这样的属性:android:state_selected,会不会应该改成这个呢?试试吧,结果就是成功了!
具体来说,很简单,这个selector的xml代码如下:
<selector xmlns:android="http://schemas.android.com/apk/res/android"
>
<item
android:state_selected="true"
android:drawable="@drawable/第一个背景"/>
<item
android:state_selected="false"
android:drawable="@drawable/第二个背景"/>
</selector>
问题解决了之后,也应该多想想,其实根本原因在于自己开发Android的经验太少,不了解这些东西,如果多开发,多做应用的话,会增加对Android的了解,这样的问题自然也会迎刃而解了。