Come cambiare il colore di una casella di controllo?
-
27-10-2019 - |
Domanda
Come cambio il valore predefinito CheckBox
Colore in Android?
Per impostazione predefinita il CheckBox
Il colore è verde e voglio cambiare questo colore.
Se non è possibile, dimmi come fare un'usanza CheckBox
?
Soluzione
Se tuo minSdkVersion
è 21+ utilizzo android:buttonTint
attributo per aggiornare il colore di una casella di controllo:
<CheckBox
...
android:buttonTint="@color/tint_color" />
Nei progetti che utilizzano la libreria AppCompat e supportano le versioni Android al di sotto di 21 puoi utilizzare una versione compatita del buttonTint
attributo:
<CheckBox
...
app:buttonTint="@color/tint_color" />
In questo caso se si desidera sottoclasse a CheckBox
Non dimenticare di usare AppCompatCheckBox
invece.
Risposta precedente:
Si può cambiare CheckBox
S Drawable Using android:button="@drawable/your_check_drawable"
attributo.
Altri suggerimenti
Puoi cambiare il colore direttamente in XML. Uso buttonTint
Per la scatola: (A partire da API Livello 23)
<CheckBox
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:buttonTint="@color/CHECK_COLOR" />
Puoi anche farlo usando appCompatCheckbox v7
Per i livelli API più vecchi:
<android.support.v7.widget.AppCompatCheckBox
android:layout_width="wrap_content"
android:layout_height="wrap_content"
app:buttonTint="@color/COLOR_HERE" />
Puoi impostare il tema Android della casella di controllo per ottenere il colore che desideri nei tuoi stili.xml Aggiungi:
<style name="checkBoxStyle" parent="Base.Theme.AppCompat">
<item name="colorAccent">CHECKEDHIGHLIGHTCOLOR</item>
<item name="android:textColorSecondary">UNCHECKEDCOLOR</item>
</style>
Quindi nel tuo file di layout:
<CheckBox
android:theme="@style/checkBoxStyle"
android:id="@+id/chooseItemCheckBox"
android:layout_width="wrap_content"
android:layout_height="wrap_content"/>
A differenza dell'uso android:buttonTint="@color/CHECK_COLOR"
Questo metodo funziona sotto API 23
Versione programmatica:
int states[][] = {{android.R.attr.state_checked}, {}};
int colors[] = {color_for_state_checked, color_for_state_normal}
CompoundButtonCompat.setButtonTintList(checkbox, new ColorStateList(states, colors));
Uso buttonTint
Per modificare il colore del selettore di pulsanti e colori per la versione API sopra 21+.
<android.support.v7.widget.AppCompatCheckBox
android:id="@+id/check"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
app:buttonTint="@color/checkbox_filter_tint"
tools:targetApi="21"/>
Res/Colors/CheckBox_filter_tint.xml
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:color="@color/light_gray_checkbox"
android:state_checked="false"/>
<item android:color="@color/common_red"
android:state_checked="true"/>
</selector>
Suggerirei di usare l'approccio Style in Android come modo per configurare le viste Android integrate, aggiungere un nuovo stile nel tuo progetto:
<style name="yourStyle" parent="Base.Theme.AppCompat">
<item name="colorAccent">your_color</item> <!-- for uncheck state -->
<item name="android:textColorSecondary">your color</item> <!-- for check state -->
</style>
e aggiungi assegnare questo stile al tema della casella di controllo: Android: tema = "@style/youstyle"
spero che sia di aiuto.
Aggiungi ButtonTint nel tuo XML
<CheckBox
android:id="@+id/chk_remember_signup"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:buttonTint="@android:color/white"
android:text="@string/hint_chk_remember_me" />
Aggiungi questa riga nel tuo styles.xml
file:
<style>
<item name="android:colorAccent">@android:color/holo_green_dark</item>
</style>
ButtonTint ha funzionato per me prova
Android: ButtonTint = "@Color/White"
<CheckBox
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerHorizontal="true"
android:id="@+id/agreeCheckBox"
android:text="@string/i_agree_to_terms_s"
android:buttonTint="@color/white"
android:layout_below="@+id/avoid_spam_text"/>
Ho affrontato lo stesso problema, ho ottenuto una soluzione usando sotto la tecnica. Copia il btn_check.xml
da android-sdk/platforms/android-#(version)/data/res/drawable
alla cartella disegnabile del tuo progetto e modifica l'immagine "ON" e "Off" nelle tue immagini personalizzate.
Allora il tuo XML avrà solo bisogno android:button="@drawable/btn_check"
<CheckBox
android:button="@drawable/btn_check"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:checked="true" />
Se si desidera utilizzare diverse icone Android predefinite, puoi usare:
android:button="@android:drawable/..."
Si può cambiare checkbox
Colore usando la riga di codice Singe
android:buttonTint="@color/app_color" //whatever color
Puoi creare il tuo XML in Drawable e usarlo come Android: Background = "@Drawable/Your_xml"
In quanto puoi dare tutto all'angolo di confine tutto
<item>
<shape>
<gradient
android:endColor="#fff"
android:startColor="#fff"/>
<corners
android:radius="2dp"/>
<stroke
android:width="15dp"
android:color="#0013669e"/>
</shape>
</item>
Ciao, questo è il codice a tema sia per tema oscuro che per tema luminoso.
<attr name="buttonsearch_picture" format="reference"/>
<attr name="buttonrefresh_picture" format="reference"/>
<style name="Theme.Light" parent="Theme.AppCompat.Light.NoActionBar">
<item name="android:windowNoTitle">true</item>
<item name="android:windowBackground">@color/white</item>
<item name="android:windowActionBar">false</item>
<item name="android:textColorPrimary">@color/black</item>
<item name="android:textColorSecondary">@color/black</item>
<item name="android:textColor">@color/material_gray_800</item>
<item name="actionOverflowButtonStyle">@style/LightOverflowButtonStyle</item>
<item name="buttonsearch_picture">@drawable/ic_search_black</item>
<item name="buttonrefresh_picture">@drawable/ic_refresh_black</item>
</style>
<style name="Theme.Dark" parent="Theme.AppCompat.NoActionBar">
<item name="android:windowNoTitle">true</item>
<item name="android:windowBackground">@color/white</item>
<item name="android:windowActionBar">false</item>
<item name="android:textColorPrimary">@color/white</item>
<item name="android:textColorSecondary">@color/material_gray_500</item>
<item name="android:textColor">@color/material_gray_800</item>
<item name="actionOverflowButtonStyle">@style/DarkOverflowButtonStyle</item>
<item name="buttonsearch_picture">@drawable/ic_search_white</item>
<item name="buttonrefresh_picture">@drawable/ic_refresh_white</item>
<item name="android:colorBackground">#ffffff</item>
<item name="android:alertDialogTheme">@style/LightDialogTheme</item>
<item name="android:alertDialogStyle">@style/LightDialogTheme</item>
<!-- <item name="android:textViewStyle">@style/AppTheme.Widget.TextView</item>-->
<item name="android:popupMenuStyle">@style/PopupMenu</item>
</style>
Se si desidera modificare il colore della casella di controllo, l'attributo "Coloraccent" utilizzerà per lo stato controllato e "Android: TextColoRorseCondary" utilizzerà per lo stato di delegato.
"ActionOverFlowButtonStyle" utilizzerà per cambiare il colore dell'icona di overflow nella barra d'azione.
L'attributo "ButtonSearch_Picture" utilizzerà per modificare il pulsante TINT Color of Action nella barra di azione. Questo è un attributo personalizzato in style.xml
<attr name="buttonsearch_picture" format="reference"/>
Lo stesso è il pulsante di aggiornamento che sto usando nella mia app.
L'attributo "Android: Popupmenustyle" sta usando per ottenere uno stile di menu popup a tema leggero in tema oscuro.
<style name="PopupMenu" parent="Theme.AppCompat.Light.NoActionBar">
</style>
E questo è il codice della barra degli strumenti che sto usando nell'app My Rocks Player.
<android.support.v7.widget.Toolbar
android:id="@+id/toolbar"
app:contentInsetStart="0dp"
android:title="Rocks Player"
android:layout_width="match_parent"
android:elevation="4dp"
android:layout_height="48dp"
app:layout_scrollFlags="scroll|enterAlways"
android:minHeight="48dp"
app:titleTextAppearance="@style/Toolbar.TitleText"
app:popupTheme="@style/ThemeOverlay.AppCompat.Light"
android:background="?attr/colorPrimary"
>
</android.support.v7.widget.Toolbar>
Temi:-
<style name="AppTheme0" parent="Theme.Light">
<item name="colorPrimary">#ffffff</item>
<item name="colorPrimaryDark">#cccccc</item>
<item name="colorAccent">#0294ff</item>
</style>
<style name="AppTheme1" parent="Theme.Dark">
<item name="colorPrimary">#4161b2</item>
<item name="colorPrimaryDark">#4161b2</item>
<item name="colorAccent">#4161b2</item>
</style>
Crea un XML Drawable resource file
sotto res->drawable
e chiamarlo, per esempio, checkbox_custom_01.xml
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item
android:state_checked="true"
android:drawable="@drawable/checkbox_custom_01_checked_white_green_32" />
<item
android:state_checked="false"
android:drawable="@drawable/checkbox_custom_01_unchecked_gray_32" />
</selector>
Carica i file di immagini della casella di controllo personalizzati (ti consiglio PNG) sul tuo res->drawable
cartella.
Quindi vai nel file di layout e cambia la casella di controllo in
<CheckBox
android:id="@+id/checkBox1"
android:button="@drawable/checkbox_custom_01"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentLeft="true"
android:focusable="false"
android:focusableInTouchMode="false"
android:text="CheckBox"
android:textSize="32dip"/>
Puoi personalizzare qualsiasi cosa, purché android:button
punta al file XML corretto creato prima.
Nota per i neofiti: sebbene non sia obbligatorio, è comunque una buona pratica nominare la casella di controllo con un ID univoco in tutto il tuo layout Tree.
Puoi cambiare il colore di sfondo del <CheckBox>
Incorporandolo all'interno di a <LinearLayout>
. Quindi modificare il colore di sfondo di <LinearLayout>
al colore che desideri.
Dovresti provare il codice di seguito. Funziona per me.
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:drawable="@drawable/checked"
android:state_checked="true">
<color android:color="@color/yello" />
</item>
<!-- checked -->
<item android:drawable="@drawable/unchecked"
android:state_checked="false">
<color android:color="@color/black"></color>
</item>
<!-- unchecked -->
<item android:drawable="@drawable/checked"
android:state_focused="true">
<color android:color="@color/yello"></color>
</item>
<!-- on focus -->
<item android:drawable="@drawable/unchecked">
<color android:color="@color/black"></color>
</item>
<!-- default -->
</selector>
e casella di controllo
<CheckBox
Button="@style/currentcy_check_box_style"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:paddingLeft="20dp"
android:text="@string/step_one_currency_aud" />
Se hai intenzione di utilizzare le icone Android, come descritto sopra ..
android:button="@android:drawable/..."
.. È una buona opzione, ma per questo funzionamento - Ho scoperto che devi aggiungere la logica a disattivazione per mostrare/nascondere il segno di spunta, in questo modo:
checkBoxShowPwd.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
// checkbox status is changed from uncheck to checked.
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
int btnDrawable = android.R.drawable.checkbox_off_background;
if (isChecked)
{
btnDrawable = android.R.drawable.checkbox_on_background;
}
checkBoxShowPwd.setButtonDrawable(btnDrawable);
}
});
È possibile utilizzare le seguenti due proprietà in "Colors.xml"
<color name="colorControlNormal">#eeeeee</color>
<color name="colorControlActivated">#eeeeee</color>
ColorControlNormal è per la normale vista della casella di controllo e ColorControlactivated è per quando la casella di controllo è controllata.
Approccio robusto al 100%.
Nel mio caso, non avevo accesso al file di origine del layout XML, poiché ricevo la casella di controllo da un materiale di materiale di 3 ° partito Lib. Quindi devo risolverlo a livello di programmazione.
- Crea un colorstateList in XML:
Res/Color/checkbox_tinit_dark_theme.xml:
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:color="@color/white"
android:state_checked="false"/>
<item android:color="@color/positiveButtonBg"
android:state_checked="true"/>
</selector>
Quindi applicalo alla casella di controllo:
ColorStateList darkStateList = ContextCompat.getColorStateList(getContext(), R.color.checkbox_tint_dark_theme); CompoundButtonCompat.setButtonTintList(checkbox, darkStateList);
PS Inoltre se qualcuno è interessato, ecco come è possibile ottenere la tua casella di controllo dalla finestra di dialogo MaterialDialog (se la imposta con .checkBoxPromptRes(...)
):
CheckBox checkbox = (CheckBox) dialog.getView().findViewById(R.id.md_promptCheckbox);
Spero che sia di aiuto.
Esiste un modo molto più semplice per impostare il colore programmaticamente. Utilizzare il metodo sotto, checkBox.setButtonTintList (colorStateList.Valueof (getContext (). GetColor (r.Color.yourColor)))
Usa questo per modificare lo sfondo della casella di controllo in dinamicamente nel codice Java
// Impostazione del colore di sfondo sulla casella di controllo. CheckBox.setBackGroundColor (color.ParseColor ("#00e2a5"));
Questa risposta è stata da un questo luogo. Puoi anche usarlo luogo Per convertire il colore RGB al valore esagonale devi nutrire il parseColor