1、找到listView 源文件,位置为:frameworks\base\core\java\android\widget\ListView
2、查看构造方法 ListView(Context context, AttributeSet attrs, int defStyle) ,根据TypedArray a = context.obtainStyledAttributes(attrs,com.android.internal.R.styleable.ListView, defStyle, 0)得知,定义的属性在R.styleable.ListView
3、frameworks\base\core\res\res\values\attrs.xml 找到ListView 的属性集
4、加入新属性:<attr name="noSelectorOnTop" format="boolean"> 属性的名字是noSelectorOnTop,类型是boolean
5、在frameworks\base\core\res\res\values\public.xml 中在 加上<public type="attr" name="noSelectorOnTop" id="0x0101021d" />,其中id为所有attr的最大值。这一步的作用就是提升该属性的权限
6、将做好的资源文件放入相应的位置。这里,我们在frameworks\base\core\res\res\drawable-hdpi中加入一张完全透明的新图片list_bg_transparent.png用来做为ListView的focus背景色
7、在frameworks\base\core\res\res\drawable 中加入 list_selector_background_transparent.xml。这里定义了listView各种状态下得item背景
8、回到listView 源文件,修改ListView(Context context, AttributeSet attrs, int defStyle)构造方法及其他对应的修改
9、执行./mk ckt73_gb update-api,主要是为了将刚才添加的方法暴露出来
10、在我们手机的任何地方,只要不进行移植的程序,比如短信、Phone、framework、设置等,只需要在配置文件中加入:android:noSelectorOnTop或者在java文件中调用方法setNoSelectorOnTop(true),即实现了listView获取焦点时,没有难看的背景。
eg.
<ListView
android:drawSelectorOnTop="false"
android:layout_weight="1" />
ListView.java
noSelectorOnTop = a.getBoolean(R.styleable.ListView_noSelectorOnTop, false);
if(noSelectorOnTop){
setSelector(com.android.internal.R.drawable.list_selector_background_transparent);
}