13

Ich mache grenzenlose flache Schaltfläche mit Unterstützung Bibliothek (23.0.1). Es funktioniert normal auf Lollipop. Jedoch auf Pre-Lollipop, wenn ich Knopf drücke, ändert sich die Farbe zu colorButtonNormal Farbe, wie es ein normaler Knopf ist.Randlose Schaltfläche auf Pre-Lollipop mit Support-Bibliothek

Ich glaube nicht, dass es ein normales Verhalten ist und konzentrierte Farbe sollte grau wie auf Lollipop sein.

Hier ist der Screenshot von Lollipop und Pre-Lollipop.

Erstes normale Verhalten auf Lollipop: Randlos-Taste im Normalzustand und fokussierten Zustand auf Lollipop

enter image description here

nicht normales Verhalten auf Pre-Lollipop (Wunschfarbe grau wie oben, aber es ist nicht) : Randlos-Taste im Normalzustand und fokussierten Zustand auf Pre-Lutscher enter image description here

Theme

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

Und jetzt Knopf im 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" 
      /> 

Jede Art und Weise, es zu erhalten, schreibt AppCompat Theme und Stile mit ohne gesonderten Drawables machen.

+0

Nur ein Gedanke, aber haben Sie versucht, zu ändern ' @ color/orangeColor' auf ' @ android: Farbe/transparent' in Ihrem res/Stile. xml (Sie können es so beibehalten, wie es in der v-21/Styles ist)? –

+0

@AdvaitS colorButtonNormal ändert auch den backgroundTint der normalen Taste. – Sharj

Antwort

22

Borderless Button mit Support Library sowohl Post und Pre Lollipop Version funktioniert, aber es gibt einen kleinen Unterschied zwischen ihren onPressed co lor.

Pre-Lollipop: Standardmäßig onPressed ist die gleiche Farbe wie die Standardfarbe. Die Farbe der Schaltfläche wird mit colorButtonNormal festgelegt.

Lollipop: Standardmäßig ist onPressed Farbe hellgrau, was ideal ist.

Sie können eine Randlos-Taste wie folgt machen:

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

Jetzt Wenn Sie die gleiche onPressed Farbe auf allen Versionen haben wollen, dann können Sie colorControlHighlight in einem neuen Thema gesetzt und dieses Thema auf Schaltflächen.

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

Und Thema in Ihrem Stil:

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

Aktualisiert: Sie android:theme Attribut für eine View seit Android 5.0 Lollipop können und AppCompat v22.1.0 (und höher).

+0

Wie setzt man "Thema" für eine einzelne Taste? Ich dachte, Android erlaubt es, Themen nur auf Gruppen und Aktivitäten zu setzen. –

+2

@AlexPetrenko ja Sie können 'Android: Thema 'auf einer Ansicht seit Android 5 und AppCompat v22.1.0 (und höher) verwenden https://plus.google.com/u/0/+AndroidDevelopers/posts/JXHKyhsWHAH – Sharj

+0

Das ist a Toller Link, ich hätte es früher sehen sollen. Vielen Dank! –

0

Sie verwenden den android implementierten Stil von "buttonBarButtonStyle", da Sie ihn über ?atr aufrufen - verwenden Sie stattdessen style="@style/BorderlessButtonStyle.

Edit: Lassen Sie Ihr xml wie es ist, aber man kann es auf Ihr gewünschtes Verhalten wie folgt ändern:

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 implementation ist '? Attr/android: buttonBarButtonStyle' - Ohne android ist es unterstützung bibliothek implementierung, die auf pre-lollipop funktionieren sollte - Auch im thema' buttonBarButtonStyle' überschreiben mit eigenen textColor, die funktioniert. Die Sache arbeitet nicht auf Fokushintergrundfarbe auf Vorlutscher. – Sharj

+0

Ok Entschuldigung, mein Schlechter. Aber Sie können Ihr gewünschtes Verhalten programmatisch hinzufügen, ich werde meine Antwort aktualisieren. – yennsarah

1

warum Sie mit einigen Dingen Sorge mit diesem gehen Sie einfach und kostenlos

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

und jetzt sorglos über api Sachen

1

Hinzufügen style="?attr/borderlessButtonStyle" zu Button funktionierte gut für mich.