2017-05-28 56 views
0

我有一个android应用程序,在它中我有一个列表视图,选择模式设置为多个。我已将布局设置为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:另外,如果有人知道如何要实现这个没有复选框,但也没有创建一个无用的自定义适配器,我也会接受这个答案。

回答

0

创建三个绘项目:

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可绘制到您的复选框。你会得到期望的结果

+0

但是怎么办我将默认的android行布局中的自定义drawable应用于复选框?我想它涉及到创建一个完整的自定义适配器,我试图避免:( –

0

与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);