2012-12-30 9 views
6

Quando si utilizza un'immagine a 9 patch come sfondo, il riempimento sembra sempre derivato dall'immagine a 9 patch. Anche se non usi una barra di riempimento nell'immagine patch 9, usa il drawable.Override Android Riempimento con 9 patch in XML di un lato

Se le linee di riempimento non sono incluse, Android utilizza le linee sinistra e superiore per definire questa area disegnabile.

http://developer.android.com/guide/topics/graphics/2d-graphics.html#nine-patch

Tuttavia è possibile ignorare nel XML utilizzando Android: padding = 0DP o = XDP. Sfortunatamente con android: paddingLeft = Xdp non funziona. Quindi sei bloccato con un'imbottitura uniforme. Ho provato a fare questo:

android:padding="2dp" 
    android:paddingLeft="20dp" 

non ha avuto alcun effetto sul padding a sinistra. Inserirli in un styles.xml ha prodotto risultati simili.

L'unico trucco che ho visto per aggirare questo è stato quello di impostare il padding in codice.

risposta

7

se (Android: imbottitura presentato) che prevale su tutti gli altri valori imbottitura else if (Android: paddingXXX presentato) prevale bg paddingXXX disegnabile (XXX = Sinistra | Destra | Top | basso) else if (vista ha bg drawable verranno utilizzati i valori di padding da questo drawable (nove patch nel tuo caso) altro padding predefinito verrà applicato (zero in genere)

Quindi non utilizzare android: padding = "2dp". la proprietà padding sovrascrive tutto. Basta usare paddingLeft = 20dp, paddingTop = 2dp, paddingRight = 2dp, paddingBottom = 2dp.

Oppure puoi impostare paddingLeft = 20dp e altri valori di padding verranno presi da bg drawable.

+2

Grazie, ho pensato che gli stili di impostazione funzionassero come i CSS. Questo ha risolto il problema. Un lead su domanda ma se uso view.setBackgroundResource (9patch_background); 9patch_background sovrascrive il padding set tramite XML c'è un modo per impostare lo sfondo senza sovrascrivere il riempimento in XML. – pt123

+1

dovresti ottenere valori di riempimento, impostare lo sfondo, ripristinare i precedenti valori di riempimento. – Leonidos