Android 代码里获得某个View的背景selector 并修改其属性

Android 代码里获得某个View的背景selector 并修改其属性
在网上找了好多资料 就看到一个StateListDrawable好像比较有关系 但是这个类怎么用 具体不懂 网上只有添加的 没有获得的 而且我找到一个返回Drawable的方法
图片说明
但是我在类里调用 找不到这个方法
图片说明
请问有什么办法从代码得到View背景的selector 并修改其属性吗

7个回答

你想要修改什么属性?getStateDrawable这个方法返回对应index位置的drawable对象。是隐藏的API。

其实这个对象就是解析Selector出来的。
可以对这个对象修改的方法就是addState(int[] state, Drawable drawable)。
这相当于在Selector中最后加一个Item,其中参数state就是给定的状态值。因为状态可以有多个,所以是个数组。

 stateListDrawable.addState(
                new int[]{android.R.attr.state_pressed, - android.R.attr.state_checkable},
                getDrawable(android.R.color.holo_red_dark));
        stateListDrawable.addState(
                new int[]{},
                getDrawable(android.R.color.holo_blue_dark));

效果相当于xml文件
<?xml version="1.0" encoding="utf-8"?>

android:state_checkable="false"
android:drawable="@android:color/holo_red_dark" />


重新设置一个select不行么

楼主:重新定义一个selector的资源文件,view引用就可以的

这个倒还真没有用过,解决了麻烦说一下

 <?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:state_selected="true"
        android:state_checkable="false"
        android:drawable="@android:color/holo_red_dark" />
    <item android:drawable="@android:color/holo_blue_dark" />
</selector>

如果想更一步修改这些状态的话,可以用反射调用隐藏API或者直接修改存放state和drawable的字段。

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
立即提问