13

Sto creando un pulsante piatto senza bordi utilizzando la libreria di supporto (23.0.1). Funziona normalmente su Lollipop. Tuttavia su pre-Lollipop quando premo il tasto Il suo colore cambia in colorButtonNormal colore come se fosse un normale pulsante.Pulsante senza bordi su pre-lecca-lecca con libreria di supporto

Non penso che sia un comportamento normale e il colore focalizzato dovrebbe essere grigio come su Lollipop.

Ecco lo screenshot di Lollipop e Pre-lollipop.

primo comportamento normale Lollipop: pulsante senza bordi in stato normale e concentrati di Stato su Lollipop

enter image description here

Non comportamento normale su Pre-Lollipop (colore desiderio è grigio come sopra ma non è) : pulsante senza bordi in stato normale e lo stato incentrato sulla pre-lollipop enter image description here

Tema

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

E ora pulsante nel layout:

<Button 
      android:id="@+id/btnForgotPassword" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:text="@string/forgot_your_password" 
      style="?attr/buttonBarButtonStyle" 
      /> 

un modo per ottenere lo scrivere usando Tema AppCompat e stili, senza di fare drawable separati.

+0

Solo un pensiero, ma hai provato a cambiare ' @ color/orangeColor' a ' @ android: colore/trasparente' nei tuoi res/styles. xml (puoi mantenerlo così com'è nella v-21/styles)? –

+0

@AdvaitS colorButtonNormal cambia anche il backgroundTint del pulsante normale. – Sharj

risposta

22

pulsante bordi funziona sia su post e la versione pre Lollipop con libreria di supporto ma c'è una piccola differenza tra il loro co onPressed Lor.

Pre-Lollipop: per impostazione predefinita, il colore premuto è lo stesso del set di colori pulsante predefinito utilizzando colorButtonNormal.

Lecca-lecca: per impostazione predefinita il colore della stampante è grigio chiaro, ideale.

si può fare un pulsante senza bordi in questo modo:

<Button 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    android:text="Name" 
    style="@style/Widget.AppCompat.Button.Borderless"/> 

Ora, se si vuole avere lo stesso colore onPressed su tutte le versioni è possibile impostare colorControlHighlight in un nuovo tema e impostare quel tema su 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"/> 

e il tema nel vostro stile:

<style name="BorderlessButton" parent="Theme.AppCompat.Light"> 
     <item name="colorControlHighlight">YOUR COLOR</item> 
</style> 

Aggiornato: È possibile utilizzare l'attributo android:theme per un View poiché Android 5.0 Lollipop e AppCompat v22.1.0 (e superiori).

+0

Come si imposta "tema" per un singolo pulsante? Pensavo che Android permettesse di impostare temi solo per gruppi di visualizzazione e attività. –

+2

@AlexPetrenko yes puoi usare 'android: theme' su una vista da Android 5 e AppCompat v22.1.0 (e successivi) https://plus.google.com/u/0/+AndroidDevelopers/posts/JXHKyhsWHAH – Sharj

+0

Questo è un ottimo collegamento, avrei dovuto vederlo prima. Grazie! –

0

Si sta utilizzando lo stile implementato Android di "buttonBarButtonStyle" poiché lo si chiama tramite ?atr - utilizzare invece style="@style/BorderlessButtonStyle.

Edit: Lascia il tuo XML come lo è, ma è possibile modificarlo a vostro comportamento desiderato come questo:

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

android implemention è '? Attr/android: buttonBarButtonStyle' - Senza Android è l'implementazione della libreria di supporto che dovrebbe funzionare su pre-lollipop - Inoltre, nel tema' buttonBarButtonStyle' sovrascrive il proprio testoColore che funziona. La cosa non funziona è a fuoco sul colore di sfondo sul pre-lecca-lecca. – Sharj

+0

Ok scusa, mia cattiva. Ma puoi aggiungere il tuo comportamento desiderato a livello di codice, aggiornerò la mia risposta. – yennsarah

1

Perché ti preoccupi con alcune cose basta andare con questo ed essere libero

<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" 
/> 

e ora incurante di cose api

1

L'aggiunta di style="?attr/borderlessButtonStyle" a Button ha funzionato bene per me.

Problemi correlati