2017-03-03 2 views
0

Ich setze die Eigenschaft buttonTint für eine Checkbox in meiner Android-App mit einem Farbselektor, um es Farbe zu ändern, wenn es aktiviert/deaktiviert ist.Setzen Sie Kontrollkästchen Farbe mit einer Farbauswahl in Android

hier ist mein XML für die Checkbox Stil:

<style name="standard_checkbox"> 
    <item name="android:layout_marginLeft">@dimen/checkbox_small_margin</item> 
    <item name="android:layout_marginRight">@dimen/checkbox_small_margin</item> 
    <item name="buttonTint">@color/checkbox_standard_selector</item> 
</style> 

Und hier ist mein XML für den Wähler:

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

Aber es ist nicht richtig funktioniert. Die Checkbox hat die richtige Farbe, wenn sie zuerst sichtbar wird (grau). Wenn Sie darauf klicken, wird es grün wie es sollte. Wenn es jedoch wieder deaktiviert wird, bleibt es aus irgendeinem Grund grün.

Ich hoffe, jemand kann sehen, was falsch ist. Jede Hilfe wird sehr geschätzt.

EDIT: Das Problem kann auch durch meine Wahl des Themas im Manifest verursacht werden. Ich bin mit diesem kundenspezifischen Thema:

<style name="Theme.Transparent.NoActionBar" parent="Theme.AppCompat.NoActionBar"> 
    <item name="android:windowIsTranslucent">true</item> 
    <item name="android:windowBackground">@android:color/transparent</item> 
    <item name="android:windowContentOverlay">@null</item> 
    <item name="android:windowNoTitle">true</item> 
    <item name="android:backgroundDimEnabled">false</item> 
</style> 
+0

Wie gehen Sie mit Farbe beim check um und deaktivieren? –

+0

Mit dem Selektor, definieren verschiedene Farben auf verschiedenen Zuständen des Kontrollkästchens (Android: state_checked = true/false) – Langkiller

+0

ich meine in der onCheck geänderten Methode? –

Antwort

0

Ich habe eine Lösung gefunden, die auf dem Code von rafsanahmad007 basiert. Ich habe eine benutzerdefinierte Checkbox-Ansicht mit einem Listener erstellt und die Tönungsfarbe basierend auf ihrem eigenen Status geändert (aktiviert oder nicht).

-Code für meine benutzerdefinierte Ansicht:

import android.content.Context; 
import android.content.res.ColorStateList; 
import android.graphics.Color; 
import android.support.v4.content.ContextCompat; 
import android.support.v4.widget.CompoundButtonCompat; 
import android.util.AttributeSet; 
import android.widget.CheckBox; 
import android.widget.CompoundButton; 

public class CustomCheckBox extends CheckBox implements CompoundButton.OnCheckedChangeListener { 

    private OnCheckedChangeListener listener; 
    private int currentColor; 

    public CustomCheckBox(Context context, AttributeSet attrs) { 
     super(context, attrs); 
     super.setOnCheckedChangeListener(this); 
     setCheckboxColor(); 
    } 

    private void setCheckboxColor() { 
     ColorStateList colorStateList = new ColorStateList(
       new int[][]{ 
         new int[]{android.R.attr.state_enabled}, 
       }, 
       new int[]{ 
         getCurrentColor() 
       } 
     ); 
     CompoundButtonCompat.setButtonTintList(this, colorStateList); 
    } 

    @Override 
    public void setOnCheckedChangeListener(OnCheckedChangeListener listener) { 
     this.listener = listener; 
    } 

    public int getCurrentColor() { 
     if (isChecked()) { 
      return ContextCompat.getColor(getContext(), R.color.checkbox_checked); 
     } else { 
      return ContextCompat.getColor(getContext(), R.color.checkbox_unchecked); 
     } 
    } 

    @Override 
    public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) { 
     setCheckboxColor(); 
     if (listener != null) { 
      listener.onCheckedChanged(buttonView, isChecked); 
     } 
    } 
} 

Ich hoffe, das jemand anderes mit dem gleichen oder einem ähnlichen Problem helfen können.

1

den folgenden Code versuchen: auf programetically checkbox Taste Hintergrund

CheckBox cb = (CheckBox) findViewById(R.id.checkbox); 
cb.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() { 
    @Override 
    public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) { 
     if (isChecked) { 
      buttonView.setBackgroundColor(getResources().getColor(R.color.checked)); 
      } 
     if (!isChecked) { 
      buttonView.setBackgroundColor(getResources().getColor(R.color.unchecked)); 
      } 
    } 
}); 

NB zu ändern: getColor() ist veraltet u ContextCompat.getColor(context, R.color.color)

Second Way verwenden müssen

Erstellen Sie eine Farblistenvariable mit Ihrer Farbe set

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("#FFFFFF"), //unchecked color 
       Color.parseColor("#009000"), //checked color 
     } 
); 

die Farbe gesetzt werden: setButtonTintList()

CheckBox cb = (CheckBox) findViewById(R.id.checkbox); 
CompoundButtonCompat.setButtonTintList(cb,colorStateList); 
+0

jemand mit 'fat brain' downvoting die Arbeit Antworten ohne einen gültigen Grund .. tragen Sie auf die gute Arbeit .. – rafsanahmad007

+0

Zeigen Sie zumindest den Mut, das Problem mit der Antwort zu finden .... – rafsanahmad007

+0

Vielen Dank! Ich weiß nicht, warum jemand downvoted (nicht ich) , aber wenn dies die einzige Lösung ist, muss ich meine eigene Ansicht implementieren, indem ich die Checkbox erweitere und den obigen Code benutze. Ich werde es ausprobieren und zu dir zurückkommen. Für jetzt nimm bitte meine Upvote :) – Langkiller

0

hatte ich gleiches Problem wie du und plötzlich bekam Idee. Warum nicht Selektor verwenden? Also habe ich es selbst versucht und es hat funktioniert.

Lösung:

Unter res Ordner Farbe Ordner erstellen, wenn Sie eine nicht und dieses Farbwähler

checkbox_selector

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

Und in Ihrem Checkbox setzen haben:

app:buttonTint="@color/checkbox_selector" 
+0

Es funktioniert nicht für mich .. aber danke. Es könnte etwas mit meiner Themenwahl zu tun haben (siehe meine Bearbeitung zu der Frage) – Langkiller

Verwandte Themen