【问题标题】:Change the multiple choice list item checkbox tint更改多项选择列表项复选框的色调
【发布时间】:2017-12-11 17:30:06
【问题描述】:

我有一个 android 应用程序,其中有一个列表视图,选择模式设置为 multiple。我已将布局设置为 simple_list_item_multiple_choice。它在行的右侧提供复选框。

但问题是:这些复选框的按钮色调是可怕的蓝色(这与我的应用程序配色方案相去甚远)。无论我做什么,我都无法改变它。

我已经尝试过:为 CheckBox 创建一个样式并为 CheckedTextView 创建一个样式,在那里更改各种按钮色调和颜色强调。

这些都不起作用。 我该怎么办?

一块布局:

...
   <ListView
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:id="@+id/listView1"
    android:layout_weight="1"
    android:choiceMode="singleChoice" /> ...

一段活动代码:

  ArrayAdapter<String> adapter = new ArrayAdapter<>(getApplicationContext(),
  android.R.layout.simple_list_item_multiple_choice, players);
  itemsList.setAdapter(adapter);

我尝试过的解决方案:

<style name="AppTheme" parent="Theme.AppCompat.NoActionBar">
    <item name="android:colorPrimary">@color/MainColor</item>
    <item name="android:colorAccent">@color/colorAccent</item>
    <item name="android:textColor">@color/MainColor</item>
    <item name="colorAccent">@color/MainColor</item>
    <item name="colorPrimary">@color/MainColor</item>
    <item name="android:checkboxStyle">@style/CheckBoxStyle</item>
    <item name="android:checkedTextViewStyle">@style/CheckedTextViewStyle</item>
</style>
<style name="CheckBoxStyle" parent="AppTheme">
    <item name="android:tint">@color/colorAccent</item>
    <item name="android:buttonTint">@color/colorAccent</item>
</style>

<style name="CheckedTextViewStyle" parent="AppTheme">
    <item name="android:colorButtonNormal">@color/colorAccent</item>
    <item name="android:checkMarkTint">@color/colorAccent</item>
    <item name="android:tint">@color/colorAccent</item>
    <item name="android:buttonTint">@color/colorAccent</item>
    <item name="android:colorAccent">@color/colorAccent</item>
</style>

UPD:另外,如果有人知道如何在没有复选框的情况下实现这一点,而且不创建无用的自定义适配器,我也会接受这个作为答案。

【问题讨论】:

    标签: java android listview checkbox android-styles


    【解决方案1】:

    从 Android Lollipop (Api 21) 开始,您可以将 checkMarkTint 设置为您的活动主题:

    <item name="android:checkMarkTint">#ff0000</item>
    

    控制checkMark的颜色。

    如果您只想为此特定适配器执行此操作,请创建一个新主题,扩展您的活动主题:

    <style name="AdapterTheme" parent="@style/MainTheme">
        <item name="android:checkMarkTint">#ff0000</item>
    </style>
    

    并将其设置为您的ArrayAdapter:

    ContextThemeWrapper themedContext = new ContextThemeWrapper(this, R.style.AdapterTheme);
    ArrayAdapter<String> adapter = new ArrayAdapter<>(themedContext, android.R.layout.simple_list_item_multiple_choice, players);
    

    【讨论】:

      【解决方案2】:

      创建三个可绘制对象:

      checkbox_selector.xml

       <?xml version="1.0" encoding="utf-8"?>
      <selector xmlns:android="http://schemas.android.com/apk/res/android">
          <item android:drawable="@drawable/btn_check_on" android:state_checked="true" />
          <item android:drawable="@drawable/btn_check_off" android:state_checked="false" />
      </selector>
      

      btn_check_on.xml

      <vector android:height="32dp" android:viewportHeight="105.0"
          android:viewportWidth="105.0" android:width="32dp" xmlns:android="http://schemas.android.com/apk/res/android">
          <path android:fillColor="@color/colorAccent" android:pathData="M48,17c-17.12,0 -31,13.88 -31,31s13.88,31 31,31S79,65.12 79,48S65.12,17 48,17zM43.74,59.84L32.31,48.55l3.23,-3.19l8.2,8.1l17.34,-17.13l3.23,3.19L43.74,59.84z"/>
      </vector>
      

      btn_check_off.xml

      <vector android:height="32dp" android:viewportHeight="105.0"
          android:viewportWidth="105.0" android:width="32dp" xmlns:android="http://schemas.android.com/apk/res/android">
          <path android:fillColor="#fafafa" android:pathData="M48,17c-17.12,0 -31,13.88 -31,31s13.88,31 31,31S79,65.12 79,48S65.12,17 48,17zM48,75.55c-15.21,0 -27.55,-12.33 -27.55,-27.55c0,-15.21 12.33,-27.55 27.55,-27.55c15.21,0 27.55,12.33 27.55,27.55C75.55,63.21 63.21,75.55 48,75.55z"/>
      </vector>
      

      checkbox_selector.xml 作为可绘制对象应用到您的复选框。你会得到想要的结果

      【讨论】:

      • 但是如何在默认的 android 行布局中将自定义可绘制对象应用于复选框?我想它涉及创建一个完整的自定义适配器,我试图避免:(
      猜你喜欢
      • 2014-09-16
      • 1970-01-01
      • 2017-03-06
      • 1970-01-01
      • 1970-01-01
      • 2015-11-17
      • 2012-10-01
      • 2013-07-12
      • 1970-01-01
      相关资源
      最近更新 更多