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