如何从View.getDrawableState()中识别状态

时间:2014-07-17 05:54:59

标签: android android-view android-ui android-resources android-drawable

我尝试创建一个自定义按钮,根据按钮状态(按下,启用等)更改其阴影属性(半径,距离等)

我终于接受了这不能使用XML选择器完成,因此我重写了View.drawableStateChanged(),并尝试使用View.getDrawableState()来计算当前状态。

但是,这个函数返回一个int [],我无法弄清楚这个值的含义,以及如何从中提取单个状态。 文档是纯粹的废话:

  

public final int [] getDrawableState()

     

在API级别1中添加

     

返回表示可绘制状态的资源ID数组   目前的观点状态。

     

返回当前可绘制状态

我也找不到在线示例,与此相关的Android源代码非常神秘。

那么,你如何从这个int []中弄清楚当前"压缩"例如,按钮的状态?或者"启用状态"?

1 个答案:

答案 0 :(得分:7)

我只是通过反复试验来解决这个问题。

该列表包含" true"的资源标识符。状态,并且不包含" false"的标识符。状态。 以下代码满足了我的需求:

// Get the relevant drawable state
boolean statePressed = false, stateEnabled = false;
int[] states = getDrawableState();
for (int state : states)
{
    if (state == android.R.attr.state_enabled)
        stateEnabled = true;
    else if (state == android.R.attr.state_pressed)
        statePressed = true;
}