wake-up-neo.net

Randloser Knopf auf Pre-Lollipop mit Support-Bibliothek

Ich mache einen randlosen Flat-Button mit der Support-Bibliothek (23.0.1). Bei Lollipop funktioniert es normal. Jedoch auf Pre-Lollipop, wenn ich den Knopf drücke. Seine Farbe ändert sich in colorButtonNormal Farbe, als wäre es ein normaler Knopf.

Ich denke nicht, dass dies ein normales Verhalten ist und dass die fokussierte Farbe grau sein sollte wie bei Lollipop.

Hier ist der Screenshot von Lollipop und Pre-Lollipop.

Erstes normales Verhalten bei Lollipop: Randloser Knopf im normalen Zustand und fokussierter Zustand bei Lollipop

 enter image description here

Nicht normales Verhalten auf Pre-Lollipop ( Wunschfarbe ist grau wie oben, aber nicht ): Randloser Knopf im Normalzustand und fokussierter Zustand auf Pre-Lollipop  enter image description here

Thema

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

Jeder Weg, es mit AppCompat Theme und Styles schreiben zu lassen, ohne separate Drawables zu erstellen.

15
Sharj

Die Borderless-Taste funktioniert sowohl in der Post- als auch in der Pre-Lollipop-Version mit der Support Library. Die onPressed-Farbe unterscheidet sich jedoch geringfügig. 

Pre-Lollipop: Standardmäßig ist onPressed color dieselbe Farbe wie die mit colorButtonNormal festgelegte Button-Farbe.

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

Sie können einen randlosen Button wie folgt erstellen:

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

Wenn Sie in allen Versionen dieselbe onPressed-Farbe haben möchten, können Sie colorControlHighlight in einem neuen Design festlegen und dieses Design auf Button setzen.

<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 ein Thema in deinem Stil:

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

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

24
Sharj

Das Hinzufügen von style="?attr/borderlessButtonStyle" zur Button hat für mich gut funktioniert.

2
arekolek

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

Bearbeiten: Belassen Sie Ihre XML-Datei so wie sie ist, aber Sie können sie wie folgt in Ihr gewünschtes Verhalten ä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
yennsarah

warum machst du dir Sorgen mit einigen Dingen, geh einfach damit und sei frei

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

und jetzt sorglos über api-sachen

0
Elltz