web-dev-qa-db-fra.com

Bouton sans bordure sur Pre-Lollipop avec bibliothèque de support

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

enter image description here

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 enter image description here

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é.

15
Sharj

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).

24
Sharj

Ajouter style="?attr/borderlessButtonStyle" à la Button a bien fonctionné pour moi.

2
arekolek

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);
0
yennsarah

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

0
Elltz