2013-05-02 20 views
9

Sto provando a cambiare il padding da un pulsante in una risorsa drawable personalizzata e riutilizzarlo in un selettore. Modifica drawable non sembra che il problema, ma l'App utilizzare sempre il massimo aviable imbottitura dalle diverse drawable:Cambia padding in selector drawable

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

Il problema è che il mio Button utilizza l'imbottitura 10dp in tutti gli stati, compreso lo stato "inattivo".

Esiste una soluzione per farlo funzionare solo con XML oppure è consigliabile creare un pulsante personalizzato in modo programmatico?

+0

L'ho provato con uno dei miei pulsanti disegnabili. Quello normale non ha padding e ho aggiunto padding a quello premuto. Usa il padding da quello premuto anche quando mostra quello normale. Ho anche un problema con i file .png che sto usando allo stesso modo. Ne ho fatto uno più grande di quello normale, ma le dimensioni non cambiano. Questo fa schifo. –

+0

http://stackoverflow.com/a/19227057/1645319 –

risposta

4

provare questo

<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

Aggiungi attributo android:variablePadding="true" al selettore.

Non sono sicuro di come (e se) funzioni questo quando si utilizza l'elenco dei livelli, tuttavia ho deciso di condividerlo ugualmente per chiunque cerchi la risposta (come lo ero io).

+0

android: variablePadding è errato e non ha mai funzionato. – ElSajko