自定义属性

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

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值