Android:如何以编程方式更新选择器(StateListDrawable) [英] Android : How to update the selector(StateListDrawable) programmatically

查看:15
本文介绍了Android:如何以编程方式更新选择器(StateListDrawable)的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我想以编程方式更新按钮的选择器.

I want to update the selector for a button programmatically.

我可以使用下面给出的 xml 文件来做到这一点

I can do this with the xml file which is given below

<?xml version="1.0" encoding="UTF-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
   <item android:state_enabled="false"
         android:drawable="@drawable/btn_off" />
   <item android:state_pressed="true"
         android:state_enabled="true" 
         android:drawable="@drawable/btn_off" />
   <item android:state_focused="true"
         android:state_enabled="true" 
         android:drawable="@drawable/btn_on" />
   <item android:state_enabled="true" 
         android:drawable="@drawable/btn_on" />
</selector>

我想以编程方式做同样的事情.我已经尝试过类似下面给出的东西

I want to do the same thing programmatically. I have tried something like given below

private StateListDrawable setImageButtonState(int index)
{
    StateListDrawable states = new StateListDrawable();

    states.addState(new int[] {android.R.attr.stateNotNeeded},R.drawable.btn_off); 
    states.addState(new int[] {android.R.attr.state_pressed, android.R.attr.state_enabled},R.drawable.btn_off);
    states.addState(new int[] {android.R.attr.state_focused, android.R.attr.state_enabled},R.drawable.btn_on);
    states.addState(new int[] {android.R.attr.state_enabled},R.drawable.btn_on);

    return states;
}

但是没有用.

以及如何以编程方式设置 android:state_enabled="false"android:state_enabled="true".

And how to set android:state_enabled="false" or android:state_enabled="true" programatically.

推荐答案

您需要使用所需状态的负值.例如:

You need to use the negative value of the needed state. E.g.:

states.addState(new int[] {-android.R.attr.state_enabled},R.drawable.btn_disabled);

注意android.R.attr.state_enabled前的-"号.

这篇关于Android:如何以编程方式更新选择器(StateListDrawable)的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆