Je fabrique des boutons plats sans bordure à l'aide de la bibliothèque de support (23.0.1). Cela fonctionne normalement sur Lollipop. Cependant, sur le pré-sucette lorsque j'appuie sur le bouton, sa couleur change en couleur colorButtonNormal
comme si c'était un bouton normal.
Je ne pense pas que ce soit un comportement normal et la couleur focalisée devrait être grise comme sur Lollipop.
Voici la capture d'écran de Lollipop et Pre-Lollipop.
Premier comportement normal sur Lollipop: Bouton sans bordure en état normal et focalisé sur Lollipop
Comportement inhabituel sur Pre-Lollipop (La couleur désirée est grise comme ci-dessus, mais ce n'est pas): Bouton sans bordure en état normal et activé sur Pre-Lollipop
Thème
<style name="AppTheme.Base" parent="Theme.AppCompat.Light.NoActionBar">
//other stuff
<item name="colorButtonNormal">@color/orangeColor</item>
<item name="buttonBarButtonStyle">@style/BorderlessButtonStyle</item>
</style>
<style name="BorderlessButtonStyle" parent="Widget.AppCompat.Button.Borderless">
<item name="Android:textColor">@color/blueTextColor</item>
</style>
Et maintenant, bouton dans la mise en page:
<Button
Android:id="@+id/btnForgotPassword"
Android:layout_width="wrap_content"
Android:layout_height="wrap_content"
Android:text="@string/forgot_your_password"
style="?attr/buttonBarButtonStyle"
/>
N'importe quel moyen de l'écrire en utilisant AppCompat Theme et les styles sans créer de Drawables séparé.
Borderless Button fonctionne sur les versions Post et Pre Lollipop avec Support Library, mais il existe une petite différence entre leur couleur onPressed.
Pre-Lollipop: Par défaut, la couleur onPressed est identique à la couleur par défaut du bouton définie avec colorButtonNormal
.
Sucette: Par défaut, onPressed est en gris clair, ce qui est idéal.
Vous pouvez créer un bouton sans bordure comme ceci:
<Button
Android:layout_width="match_parent"
Android:layout_height="wrap_content"
Android:text="Name"
style="@style/Widget.AppCompat.Button.Borderless"/>
Maintenant, si vous voulez avoir la même couleur onPressed sur toutes les versions, vous pouvez définir colorControlHighlight
dans un nouveau thème et définir ce thème sur Button.
<Button
Android:layout_width="match_parent"
Android:layout_height="wrap_content"
Android:text="Name"
Android:theme="@style/BorderlessButton"
style="@style/Widget.AppCompat.Button.Borderless"/>
Et thème dans votre style:
<style name="BorderlessButton" parent="Theme.AppCompat.Light">
<item name="colorControlHighlight">YOUR COLOR</item>
</style>
Mis à jour : Vous pouvez utiliser l'attribut Android:theme
pour une View
depuis Android 5.0 Lollipop et AppCompat v22.1.0 (et versions ultérieures).
Ajouter style="?attr/borderlessButtonStyle"
à la Button
a bien fonctionné pour moi.
Vous utilisez le style "buttonBarButtonStyle" implémenté par Android puisque vous l'appelez via ?atr
- utilisez plutôt style="@style/BorderlessButtonStyle
.
Edit: Laissez votre code XML tel quel, mais vous pouvez le modifier selon votre comportement souhaité, comme suit:
AppCompatButton button = (AppCompatButton) findViewById(R.id.btnForgotPassword);
ColorStateList colorStateList = new ColorStateList(new int[][] {{0}}, new int[] {0xFF969696});
//969696 is your wanted grey color, just change it
button.setSupportBackgroundTintList(colorStateList);
pourquoi vous inquiétez-vous avec certaines choses simplement aller avec cela et être libre
<Button
Android:id="@+id/btnForgotPassword"
Android:layout_width="wrap_content"
Android:layout_height="wrap_content"
Android:text="@string/forgot_your_password"
Android:background="@drawable/abc_btn_borderless_material"
/>
et maintenant négligents sur les trucs api