usar studio example como android material-design

android - studio - material design download



Android appcompat-v7: 21.0.0 cambiar colores de casilla de verificación de material (18)

Añadir

<item name="android:textColorSecondary">@color/secondary_text</item>

en style.xml y style.xml (v21)

He actualizado mi proyecto para usar la última biblioteca de soporte de appcompat, la nueva versión usa casillas de verificación de diseño de materiales y botones de radio. Mi aplicación tiene un tema oscuro y las casillas de verificación son negras, lo que es difícil de ver. Estoy tratando de cambiar sus colores de acuerdo con la compatibilidad de mantenimiento, pero hasta ahora nada funciona.

res / values ​​/ styles.xml

<style name="AppBaseTheme" parent="@style/Theme.AppCompat.Light"> <!-- customize the color palette --> <item name="colorAccent">@color/silver</item> </style>

en build.gradle:

android { compileSdkVersion 21 buildToolsVersion ''21.1.1'' defaultConfig { minSdkVersion 9 targetSdkVersion 19 } } ..... ..... compile ''com.android.support:appcompat-v7:21.0.0''

AndroidManifest.xml:

<application android:name="ee.mtakso.App" android:allowBackup="true" android:icon="@drawable/ic_launcher" android:label="@string/app_name" android:theme="@style/AppBaseTheme">

Las casillas de verificación, editTexts, botones de radio, etc. permanecen en negro.

Editar

No sé si esto hace mucha diferencia, pero los CheckedTextView y las casillas de verificación que estoy usando son para un CheckedTextView , de la siguiente manera:

Single (botón de android:checkMark="?android:attr/listChoiceIndicatorSingle" ): android:checkMark="?android:attr/listChoiceIndicatorSingle"

Multi (casilla de verificación): android:checkMark="?android:attr/listChoiceIndicatorMultiple"

Como estos hacen que el material de color negro sea dibujable, no creo que el problema provenga de ellos.


Creo que esto es un error en el tema AppCompat. Mi solución agrega dos líneas de código a cada CheckBox en el archivo de diseño xml.

android:button="@drawable/abc_btn_check_material" android:buttonTint="@color/colorAccent"

Realmente nunca desea hacer referencia directa a abc_ drawables pero en este caso no encontré otra solución.

¡Esto también se aplica al widget RadioButton! Simplemente usaría abc_btn_radio_material en lugar de abc_btn_check_material


El padre de su AppTheme es @style/Theme.AppCompat.Light .

@style/Theme.AppCompat a @style/Theme.AppCompat .

Ahora sus controles serán claros sobre un fondo oscuro.


Estoy usando la biblioteca appcompat v21:

<style name="AppBaseTheme" parent="Theme.AppCompat.Light"> <item name="colorPrimary">@color/custom_color</item> <item name="colorAccent">@color/custom_color</item> </style>

El estilo anterior hace que mi casilla de verificación aparezca con diseño de material (probado en Android 5, 4.3, 4.1.1) pero en Android 2.3.3 aparece con el estilo de casilla de verificación anterior.


He estado buscando una solución y la encontré.

Paso 1
Extender ActionBarActivity

public static class MyActivity extends ActionBarActivity { //... }

Paso 2
En su archivo de estilo escribe dos valores

<style name="MyTheme" parent="Theme.AppCompat.NoActionBar"> <item name="colorAccent">#009688</item> <item name="android:textColorSecondary">#757575</item> </style>

colorAccent - color marcado
android: textColorSecondary - color sin marcar

Paso 3
Establezca su tema en AndroidManifest.xml

<?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.test.radiobutton" android:versionCode="1" android:versionName="1.0"> <application android:label="@string/app_name" android:icon="@drawable/ic_launcher"> .... <activity android:name=".activity.MyActivity " android:theme="@style/MyTheme"/> ..... </application> </manifest>



RESULTADO
Android 5

Android 4.2.2


Hice esto para cambiar al menos el borde de una casilla de verificación:

<style name="checkBoxComponent" parent="AppTheme"> //Checked color <item name="colorAccent">@color/blueBackground</item> //Checkbox border color <item name="android:textColorSecondary">@color/grayBorder</item> </style>

Y en mi diseño

<android.support.v7.widget.AppCompatCheckBox android:layout_width="wrap_content" android:layout_height="wrap_content" android:theme="@style/checkBoxComponent" android:text="Yay" />

Sin embargo, aún estoy descubriendo cómo obtener el fondo de la casilla de verificación. Espero eso ayude.


Lo que hiciste debería funcionar según la publicación de blog de Android:

colorAccent : complemento brillante del color de marca principal. Por defecto, este es el color aplicado a los controles del marco (a través de colorControlActivated).

colorControlActivated : el color aplicado a los controles de marco en su estado activado (por ejemplo, verificado).

Tal vez el problema proviene de su tema que tiene @ style / Theme.AppCompat.Light como padre, intente solo con Theme.AppCompat:

<style name="AppBaseTheme" parent="Theme.AppCompat.Light"> <!-- customize the color palette --> <item name="colorAccent">@color/silver</item> </style>


Obtendrá muchos problemas con la biblioteca de compatibilidad con casillas de verificación y botones de opción.

1) Vienen solo en negro para cualquier dispositivo Android 4.x. Vienen bien en Android 5.xy 2.x (no me pregunten por qué funciona en 2.x, no tengo idea).

2) No tienen un estado deshabilitado (no importa si todas sus casillas de verificación están habilitadas, de lo contrario es bueno para una muy mala sorpresa).

Tenga en cuenta que el fondo del tema oscuro predeterminado es gris, no negro, por lo que si mantiene el valor predeterminado es "ok".

Para resolver esto, creé la versión en blanco y una versión deshabilitada de los siguientes dibujos, todos añadidos a mi proyecto principal, pero no en el proyecto de compatibilidad (para fines de mantenimiento obvio):

abc_btn_check_to_on_mtrl_000 abc_btn_check_to_on_mtrl_015 abc_btn_radio_to_on_mtrl_000 abc_btn_radio_to_on_mtrl_015

Luego creó un sorteo para administrar todos los estados (para anular el estado original compatible):

Por ejemplo, el tema oscuro usará esto:

<selector xmlns:android="http://schemas.android.com/apk/res/android"> <item android:state_enabled="false" android:state_checked="true" android:drawable="@drawable/abc_btn_check_to_on_mtrl_015_disabled" /> <item android:state_enabled="true" android:state_checked="true" android:drawable="@drawable/abc_btn_check_to_on_mtrl_015" /> <item android:state_enabled="true" android:drawable="@drawable/abc_btn_check_to_on_mtrl_000" /> <item android:drawable="@drawable/abc_btn_check_to_on_mtrl_000_disabled" /> </selector>

El tema ligero usará esto (el usuario puede cambiar el tema en mi aplicación):

<selector xmlns:android="http://schemas.android.com/apk/res/android"> <item android:state_enabled="false" android:state_checked="true" android:drawable="@drawable/abc_btn_check_to_on_mtrl_015_disabled" /> <item android:state_enabled="true" android:state_checked="true" android:drawable="@drawable/abc_btn_check_to_on_mtrl_015_light" /> <item android:state_enabled="true" android:drawable="@drawable/abc_btn_check_to_on_mtrl_000_light" /> <item android:drawable="@drawable/abc_btn_check_to_on_mtrl_000_disabled" /> </selector>

Luego, todo lo que tuve que hacer es anular el tema de compatibilidad predeterminado (actividad y diálogo, para ambos temas claros / oscuros), agregando algo como esto:

<item name="android:listChoiceIndicatorSingle">@drawable/abc_btn_radio_material</item> <item name="android:listChoiceIndicatorMultiple">@drawable/abc_btn_check_material</item>

Y esto para temas claros:

<item name="android:listChoiceIndicatorSingle">@drawable/abc_btn_radio_material_light</item> <item name="android:listChoiceIndicatorMultiple">@drawable/abc_btn_check_material_light</item>

¡Ahora tengo casillas de verificación y radios completamente operativos en todas las versiones de Android! En mi opinión, la biblioteca de compatibilidad no se probó en absoluto para el tema oscuro, solo se utilizó el tema blanco. El estado desactivado probablemente nunca sea utilizado por el desarrollador de la biblioteca de compatibilidad tampoco.


Para especificar colores, anule:

para color comprobado:

<item name="android:colorControlActivated">@color/your_color</item>

para el color no marcado:

<item name="android:colorControlNormal">@color/your_color</item>


Si desea cambiar un color de fondo de casilla de verificación específico (no toda la aplicación), puede probar este truco:

Cree el archivo custom_checkbox.xml para el fondo en la carpeta dibujable:

<shape xmlns:android="http://schemas.android.com/apk/res/android"> <stroke android:width="14dp" android:color="@android:color/transparent" /> <solid android:color="#ffffff" /> //the intended color of the background <corners android:radius="2dp" /> </shape>

y luego configúrelo como fondo de la casilla de verificación:

<CheckBox android:id="@+id/rebate_tnc_checkbox" android:layout_width="wrap_content" android:layout_height="wrap_content" android:background="@drawable/custom_checkbox" />



Simplemente extienda la ActionBarActivity de esta manera:

Public class MainActivity extends ActionBarActivity { //... }


Tuve los mismos problemas que tú. ¡Volví a mirar AppCompat v21 - Diseño de materiales para dispositivos pre-Lollipop!

Y descubrí que "Todas sus actividades deben extenderse desde ActionBarActivity , que se extiende desde FragmentActivity desde la biblioteca de soporte de v4, para que pueda continuar usando fragmentos". .

Así que cambié mi actividad a ActionBarActivity y resolvió mis problemas. Espero que también resuelva el tuyo.


Tuve un problema similar con CheckBoxes y RadioButtons sin marcar . Encontré la solución, cuando descubrí que los controles toman su color "Off" de

<item name="android:textColorSecondary">@color/secondary_text</item>

EDITAR:

Especificando, si el tema de su aplicación o actividad hereda uno de los AppCompat de L (Dark / Light / Light.DarkActionBar), puede establecer:

<style name="SampleTheme" parent="Theme.AppCompat"> <item name="colorAccent">@color/green</item> <item name="android:textColorSecondary">@color/red</item> </style>

Y ese es el resultado:

Aviso: cuando obtenga un efecto diferente, probablemente use un tema "incorrecto" ; asegúrese de configurarlo correctamente.


agregue esta sintaxis para colorear un widget como casilla de verificación o botón de opción android: buttonTint = "@ color / silver"


puedes pasar otro tema a la construcción del diálogo de alerta

<style name="RadioButton" parent="Theme.AppCompat.Light.Dialog.Alert"> <item name="colorControlNormal">@color/red</item> <item name="colorControlActivated">@color/green</item> </style>

y usar ese estilo en el constructor

new AlertDialog.Builder(getContext(), R.style.RadioButton);


1. Declare un estilo personalizado en su archivo styles.xml.

<style name="CustomStyledRadioButton" parent="Theme.AppCompat.Light"> <item name="colorControlNormal">@color/red</item> <item name="colorControlActivated">@color/red_pressed</item> </style>

2. Aplique este estilo a su RadioButton a través de Android: atributo de tema.

<RadioButton android:id="@+id/rb_option1" android:layout_width="match_parent" android:layout_height="wrap_content" android:checked="true" android:gravity="left" android:lineSpacingExtra="10dp" android:padding="10dp" android:text="Option1" android:textColor="@color/black" android:theme="@style/CustomStyledRadioButton"/>


100% de trabajo

Simplemente cree un estilo para su RadioButton y cambie ColorAccent como a continuación:

<style name="RadioButtonTeal" parent="Theme.AppCompat.Light.NoActionBar"> <item name="colorAccent">@color/md_teal_600</item> </style>

Luego simplemente agregue este estilo a su AppCompatRadioButton:

<android.support.v7.widget.AppCompatRadioButton android:layout_width="wrap_content" android:layout_height="wrap_content" android:theme="@style/RadioButtonTeal" />