首页 > 解决方案 > 为什么 ColorStateList 不适用于 GradientDrawable?

问题描述

我正在尝试使用为不同状态设置的GradientDrawable设置TestView背景。当对GradientDrawable使用方法:setStrokesetColor(获取ColorStateList)时,似乎ColorStateList被忽略了。对于以下代码:

  int frameColor = Color.parseColor("#000000");
    GradientDrawable charFrameDrawable = new GradientDrawable();
    ColorStateList colorStateList = new ColorStateList(new int[][]{{android.R.attr.state_activated}}, new int[]{frameColor});
    charFrameDrawable.setStroke(1, colorStateList);
    charFrameDrawable.setColor(colorStateList);
     textView = new TextView(this);
    textView.setBackground(charFrameDrawable);

}

@Override
protected void onStop() {
    super.onStop();
    int[] arr =textView.getBackground().getState();
    for (int i =0; i<arr.length;i++)
    {
        Log.e("12345",String.valueOf(arr[i]));

    }

我得到以下输出:

2020-07-01 03:21:45.776 29138-29138/com.example.testcheckbox E/12345: 16842910 2020-07-01 03:21:45.776 29138-29138/com.example.testcheckbox E/12345: 16843597

如您所见,尽管只有一个状态,但我得到了两个 id,并且第一个 id 属于state_enabled const(它不是我设置的状态的一部分)。有人可以帮我解决这个问题吗?谢谢

标签: javaandroiduser-interfacestatelistdrawablegradientdrawable

解决方案


推荐阅读