theme style studio materialbutton google colored buttons android appcompat android-appcompat

style - flat button android



Widget.AppCompat.Button colorButtonNormal muestra gris (11)

Tengo values:styles.xml con:

<style name="AppTheme.Button" parent="Base.Widget.AppCompat.Button"> <item name="colorButtonNormal">@color/my_color</item> <item name="android:textColor">@android:color/white</item> </style>

y values-v21:styles.xml con:

<style name="AppTheme.Button" parent="Base.Widget.AppCompat.Button"> <item name="android:colorButtonNormal">@color/my_color</item> <item name="android:textColor">@android:color/white</item> </style>

Y estilo de aplicación con

<style name="AppTheme" parent="Theme.AppCompat.Light.NoActionBar"> <item name="android:buttonStyle">@style/AppTheme.Button</item> </style>

Pero los colores aparecen en gris en lugar de @color/my_color


Asegúrese de que su Activity extienda AppCompatActivity , de lo contrario no manejará los estilos de appCompat correctamente.

  • clase: android.support.v7.app.AppCompatActivity
  • Gradle: compile ''com.android.support:appcompat-v7:23.0.1''

Coloque la línea xml a continuación en su xml "AppTheme", en lugar de intentar configurarlo desde el "AppTheme.Button". Esto funciona para mí en v22.1.1 con dispositivos que no son piruletas. Supongo que esto es un error porque su solución anterior funciona bien para lollipop.

<item name="colorButtonNormal">@color/my_color</item>


En caso de que se pregunte por qué colorButtonNormal no se selecciona como se define para los botones deshabilitados, es posible que también deba configurar android:disabledAlpha en 1.0 en su tema, de lo contrario, su color se colorButtonNormal forma predeterminada en el fondo del botón. Ejemplo:

<style name="MyButtonTheme" parent="ThemeOverlay.AppCompat.Light"> <item name="android:disabledAlpha">1.0</item> <item name="colorButtonNormal">@color/my_solid_disabled_color</item> <item name="colorAccent">@color/my_solid_accent_color</item> <item name="buttonStyle">@style/my_button_style</item> </style>


Eso funciona:

<!-- Base application theme. --> <style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar"> <item name="colorPrimary">@color/colorPrimary</item> <item name="colorPrimaryDark">@color/colorPrimaryDark</item> <item name="colorAccent">@color/colorAccent</item> <!-- android:buttonStyle for v21+ and buttonStyle for the rest --> <item name="buttonStyle">@style/MyCustomButton</item> <item name="android:buttonStyle">@style/MyCustomButton</item> <item name="colorButtonNormal">@color/my_color</item> </style> <style name="MyCustomButton" parent="Base.Widget.AppCompat.Button"> <item name="android:textColor">#ffffff</item> <item name="android:textAppearance">?android:attr/textAppearanceMedium</item> </style>

colorButtonNormal se puede establecer en el estilo del tema. Para cambiar el color del texto, el tamaño o cualquier otra característica del botón, puede crear un estilo y luego usar buttonStyle (menor que v21) o android:buttonStyle (v21 +) en el estilo del tema para configurar el estilo del botón.


Hola, creo que el widget principal que android:Widget.Button podría no ser el correcto, debería android:Widget.Button para API versión 21 o versión anterior, para la versión posterior 21 o superior deberías usar `android: Widget.Material.Button. Digamos que tiene un estilo predeterminado que debería verse a continuación.

res/values/styles.xml <resources> <!-- Base application theme. --> <style name="AppTheme" parent="Theme.AppCompat.Light.NoActionBar"> <item name="android:buttonStyle">@style/AppTheme.Button</item> </style> <style name="AppTheme.Button" parent="android:Widget.Button"> <item name="android:background">@color/my_color</item> <item name="android:textColor">@android:color/white</item> </style> </resources>

Para la versión 21 de la API, el archivo de estilo de recursos debería verse como (res / values-v21 / style.xml)

<resources> <style name="AppTheme.Button" parent="android:Widget.Material.Button"> <item name="android:background">@color/my_color</item> <item name="android:textColor">@android:color/white</item> </style> </resources>

Gracias Avísame si tienes alguna pregunta.


Para personalizar un botón solo configure android: theme = "@ style / AppTheme.Button" en su botón.

<Button android:theme="@style/AppTheme.Button" />

Define tu estilo como lo hiciste en tu pregunta

<style name="AppTheme.Button" parent="Base.Widget.AppCompat.Button"> <item name="colorButtonNormal">@color/my_color</item> </style>

[EDITAR]

Vea la demostración de GitHub here


Parece ser un error en el marco de Android que no podemos cambiar personalizar el colorButtonNormal con Widget.AppCompat.Button tema
Una solución alternativa es definir otro tema personalizado de AppCompat y usar colorAccent para establecer colorButtonNormal .

Hay dos pasos siguientes.
1.Defina otro tema para su botón personalizado.

<resources> <!-- Base application theme. --> <style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar"> <!-- Customize your theme here. --> <item name="colorPrimary">@color/colorPrimary</item> <item name="colorPrimaryDark">@color/colorPrimaryDark</item> <item name="colorAccent">@color/colorAccent</item> </style> <!-- Custom button theme. --> <style name="CustomButtonTheme" parent="Theme.AppCompat.Light.DarkActionBar"> <!-- Set your desired button color here. --> <item name="colorAccent">@color/red</item> <item name="buttonStyle">@style/Widget.AppCompat.Button.Colored</item> </style> </resources>

2. Aplicar el tema del botón en el diseño.

<Button android:theme="@style/CustomButtonTheme"/>


Pruebe buttonStyle en lugar de android: buttonStyle, ya que este es el atributo AppCompat pre Lollipop, por lo que debería estar sin el prefijo de Android


Use Widget.AppCompat.Button.Colored como padre para su estilo.

<style name="RedButton" parent="Widget.AppCompat.Button.Colored"> <item name="android:textColor">@color/white</item> <item name="colorButtonNormal">@color/red</item> </style>

Use android:theme , no style en las definiciones de botones:

<Button android:theme="@style/RedButton"/>

Consulte AppCompat v21> Theming and Android Support Library v22.1 - Publicaciones de blog de AppCompat . (nota en la segunda publicación, android:theme es compatible con API11-, simplemente no hace la herencia automática de los padres, tendrá que especificarlo en cada hijo, no es un problema aquí, pero vale la pena mencionarlo - vea la publicación de Chris Banes en ese).


Utilizar:

<style name="AppTheme" parent="Theme.AppCompat.Light.NoActionBar"> <item name="buttonStyle">@style/AppTheme.Button</item> </style>

eliminar el android:


v21 / styles.xml

<style name="AppTheme.BlueButton" parent="Widget.AppCompat.Button.Colored"> <item name="android:colorButtonNormal">@color/blue</item> <item name="android:textColor">@color/text_white</item> </style>

styles.xml

<style name="AppTheme.BlueButton" parent="Widget.AppCompat.Button.Colored"> <item name="colorButtonNormal">@color/blue_tint</item> <item name="android:textColor">@color/text_white</item> </style>

Inicialmente, también estoy enfrentando este problema. Después de hacer la corrección como arriba, obtuve el botón de interfaz de usuario correcto