2017-01-13 2 views
1

Ich versuche, das Standardverhalten der Widget.AppCompat.Button.Colored Stil zu bekämpfen. Standardmäßig ist die Schaltfläche halbtransparent. Ich möchte, dass es undurchsichtig ist. Hier ist mein Code:Widget.AppCompat.Button.Colored Button transparent, wenn deaktiviert

Knopf im Layout:

<Button 
    android:id="@+id/search" 
    style="@style/Widget.AppCompat.Button.Colored" 
    android:theme="@style/AccentButton" 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    android:text="Search"/> 

styles.xml

<style name="AccentButton" parent="ThemeOverlay.AppCompat.Light"> 
    <item name="colorAccent">@color/colorAccent</item> 
    <item name="colorButtonNormal">#f00</item> 
</style> 

Wenn ich den style="@style/Widget.AppCompat.Button.Colored" Teil der Knopf drehen nicht transparent zu entfernen, wenn deaktiviert.

Ich habe versucht, in den Appcompat/Android Quellcode zu schauen. Kein Glück aber. Ich kann den Teil nicht finden, wo es transparent ist. Das Ziel ist es, eine schöne Lösung zu bekommen, die hauptsächlich AppCompat-Code verwendet. Ich weiß, dass ich einen kundenspezifischen Knopf backgroud herstellen kann. Ich möchte es vermeiden. Irgendwelche Ideen?

Antwort

3

Die Lösung ist zu verwenden: <item name="android:disabledAlpha">1.0</item> wie folgt aus:

<style name="AccentButton" parent="ThemeOverlay.AppCompat.Light"> 
    <item name="colorAccent">@color/colorAccent</item> 
    <item name="colorButtonNormal">#f00</item> 
    <item name="android:disabledAlpha">1.0</item> 
</style> 

Wie ich auf diese Antwort bekam

Nach einigem Kampf Ich btn_colored_material.xml Quellcode gefunden habe.

<selector xmlns:android="http://schemas.android.com/apk/res/android"> 
    <item android:state_enabled="false" 
      android:alpha="?attr/disabledAlpha" 
      android:color="?attr/colorButtonNormal" /> 
    <item android:color="?attr/colorAccent" /> 
</selector> 

Es verwendet das Attribut disabledAlpha. Es ging also nur darum, es zu benutzen.

Eine Sache, die ich immer noch nicht verstehe, ist, warum ich sie mit dem android: Präfix verwenden muss. Ich würde erwarten, dass:

  • ?android:attr/something mit <item name='android:something'>(...)
  • ?attr:something eingestellt werden, um mit <item name='something'>(...)

Meine Vermutung eingestellt werden, dass, wenn Android soruce Code Code verwendet seine eigene Attribute es nicht braucht das Präfix.

Verwandte Themen