2013-05-02 9 views
9

Ich versuche, die Polsterung aus einem Knopf in einer benutzerdefinierten ziehbar ressource zu ändern und wieder verwenden diese in einem Selektor. die ziehbar ändern scheint nicht das Problem, aber die App immer die höchste Polsterung aviable aus den verschiedenen Drawables verwenden:ändert Padding in Selector ziehbar

button_inactive.xml

<?xml version="1.0" encoding="utf-8"?> 
<layer-list xmlns:android="http://schemas.android.com/apk/res/android" > 

<item> 
    <shape android:shape="rectangle" > 
     <solid android:color="#FF4d681f" /> 
    </shape> 
</item> 
<item 
    android:bottom="2dp" 
    android:left="2dp" 
    android:right="2dp" 
    android:top="2dp"> 
    <shape android:shape="rectangle" > 
     <solid android:color="#FFFFFFFF" /> 

     <padding 
      android:bottom="5dp" 
      android:top="5dp" /> 
    </shape> 
</item> 

button_active.xml

<?xml version="1.0" encoding="utf-8"?> 
<layer-list xmlns:android="http://schemas.android.com/apk/res/android" > 
<item> 
    <shape android:shape="rectangle" > 
     <solid android:color="#FF4D681F" /> 
    </shape> 
</item> 
<item 
    android:bottom="2dp" 
    android:left="2dp" 
    android:right="2dp" 
    android:top="2dp"> 
    <shape android:shape="rectangle" > 
     <solid android:color="#FF8da32d" /> 

     <padding 
      android:bottom="10dp" 
      android:top="10dp" /> 
    </shape> 
</item> 

button_selector.xml

<selector xmlns:android="http://schemas.android.com/apk/res/android"> 
<item android:state_focused="true" android:state_pressed="false" android:drawable="@drawable/button_active"/> 
<item android:state_focused="true" android:state_pressed="true" android:drawable="@drawable/button_active"/> 
<item android:state_focused="false" android:state_pressed="true" android:drawable="@drawable/button_active"/> 
<item android:drawable="@drawable/button_inactive"/> 

Das Problem ist, dass meine Taste, um die 10DP Polsterung in allen Staaten verwendet, einschließlich der "inaktiven" Zustand.

Gibt es eine Lösung, um es arbeitet nur mit XML oder es ist besser, eine benutzerdefinierte Schaltfläche programaticly machen?

+0

Ich habe es mit einer meiner Zeichen-Tasten versucht. Die normale hat keine Polsterung, und ich habe Polsterung auf die gepresste gelegt. Es verwendet das Padding von dem gedrückten, auch wenn das normale angezeigt wird. Ich habe auch ein Problem mit .png-Dateien, die ich auf die gleiche Weise verwende. Ich habe das Gepresste größer gemacht als das Normale, aber die Größe ändert sich nicht. Das ist scheiße. –

+0

http://StackOverflow.com/A/19227057/1645319 –

Antwort

4

versuchen diese

<solid android:color="#ffffff" /> 

<stroke 
    android:width="2dp" 
    android:color="@android:color/black" /> 

<padding 
    android:bottom="10dp" 
    android:left="10dp" 
    android:right="10dp" 
    android:top="10dp" /> 

<corners 
    android:bottomLeftRadius="6dp" 
    android:bottomRightRadius="6dp" 
    android:topLeftRadius="6dp" 
    android:topRightRadius="6dp" /> 

3

android:variablePadding="true" Attribut zu Ihrem Selektor hinzufügen.

bin ich nicht sicher, wie (und ob) ist dieser Arbeits wenn Sie Schicht-Liste verwenden, jedoch habe ich beschlossen, es trotzdem für jedermann die Antwort suchen zu teilen (wie ich).

+0

Android: VariablePadding ist Buggy Attribut und hat noch nie funktioniert. – ElSajko