【问题标题】:Change Checkbox colorAccent in runtime programmatically以编程方式在运行时更改复选框 colorAccent
【发布时间】:2015-05-02 06:05:08
【问题描述】:

我正在创建一个普通的复选框视图:

<CheckBox
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"/>

这个浅绿色 (#A5D6A7) 是由于主样式中定义的强调色:

<style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar">
    <item name="colorAccent">@color/green_light</item>

我已经发现我无法在运行时更改此样式:How to set colorAccent in code?

我想要的是在特定复选框上更改此颜色,而不是在应用程序上全局更改。我可以在不创建特定资产的情况下做到这一点吗?因为用户将能够在运行时更改此颜色。

谢谢!

【问题讨论】:

    标签: android checkbox colors android-drawable android-styles


    【解决方案1】:

    对于高于或等于 Lollipop 的 API 级别。试试下面的

    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
     checkBox.buttonTintList = ColorStateList.valueOf(ContextCompat.getColor(context, R.color.color_rose))
    }
    

    【讨论】:

      【解决方案2】:

      这对我有用:

      public void setCheckBoxColor(CheckBox checkBox, int checkedColor, int uncheckedColor) {
           int states[][] = {{android.R.attr.state_checked}, {}};
           int colors[] = {checkedColor, uncheckedColor};
           CompoundButtonCompat.setButtonTintList(checkBox, new 
               ColorStateList(states, colors));
      }
      

      【讨论】:

      • 工作就像一个魅力。谢谢哥们:)
      【解决方案3】:

      下面的代码将顺利运行,而不会减慢复选框的检查和取消选中行为。因为 checkbox.setSupportButtonTintList(colorStateList);在某些设备上会出现异常

      ColorStateList  colorStateList = new ColorStateList(
                              new int[][]{
                                      new int[]{-android.R.attr.state_checked}, // unchecked
                                      new int[]{android.R.attr.state_checked} , // checked
                              },
                              new int[]{
                                      Color.parseColor("#cccccc"),
                                      Color.parseColor("##cccccc"),
                              }
                      );
      
       CompoundButtonCompat.setButtonTintList(checkBox,colorStateList)
      

      【讨论】:

      • 我刚刚遇到了你提到的“意外行为”,这段代码拯救了一天!非常感谢分享!
      【解决方案4】:

      使用AppcompatCheckbox

       AppCompatCheckBox acb = (AppCompatCheckBox)findViewById(R.id.acb);
       ColorStateList colorStateList = new ColorStateList(
                      new int[][]{
      
                           new int[]{-android.R.attr.state_enabled}, //disabled
                           new int[]{android.R.attr.state_enabled} //enabled
                      },
                      new int[] {
      
                           Color.RED //disabled
                           ,Color.BLUE //enabled
      
                      }
              );
      
        acb.setSupportButtonTintList(colorStateList);
      

      【讨论】:

      • 使用此解决方案,点击速度比平时慢,但仍然有效!
      • 尝试扩展AppCompatCheckBox,添加colorstate代码;然后看表演@Lera
      • 我不再接触Android了,你们中的一些人可以确认这个答案是否解决了问题吗?
      • 我希望这可以解决@MarceloFilho 的问题,正如我之前提到的,您还可以从 AppCompatCheckbox 扩展类以提高性能
      猜你喜欢
      • 2016-11-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-04-02
      • 2020-04-20
      • 1970-01-01
      • 1970-01-01
      • 2019-03-11
      相关资源
      最近更新 更多