2015-04-17 10 views
6

Oggi ho riscontrato un problema di layout strano e non ho trovato alcuna risposta utile da parte di Google.Il riempimento del pulsante non funziona senza sfondo

Sul mio layout, ho un pulsante con il testo a sinistra e un'icona a destra. Voglio che il testo sia di 20dp margine sinistro sul bordo del pulsante, quindi ho impostato paddingLeft sul pulsante ma non funziona. Per caso, ho impostato il colore di sfondo per il pulsante e l'imbottitura funziona come un incantesimo. Chiunque può aiutarmi a spiegare questa cosa.

La disposizione è la seguente

<Buttonandroid:layout_width="fill_parent" 
     android:drawableRight="@drawable/right_arrow" 
     android:paddingLeft="20dp" 
     android:paddingRight="20dp" 
     android:layout_height="72dp" 
     android:text="Button" 
     android:id="@+id/btn" 
     android:gravity="center_vertical" 
     android:fontFamily="roboto regular" 
     android:textColor="#ffffff00" 
     style="@android:style/Widget.DeviceDefault.Button.Borderless" /> 

Grazie a tutti!

+0

fare vuoi separare il pulsante e il drawable? – Abhishek

+0

Ho aggiornato la domanda. Voglio che l'icona sia 20dp al margine destro e il testo sia 20dp margine sinistro al bordo del mio pulsante – meaholik

+1

Ciò di cui ho veramente bisogno in questa domanda è una spiegazione del perché il padding non funzionasse senza impostare il colore di sfondo per il pulsante. – meaholik

risposta

0

Aggiungere questo

android:drawablePadding="20dp" 
+0

L'ho provato e non funziona @Abhishek Dabral – meaholik

+0

puoi aggiungere una schermata di quello che stai ricevendo e quello che vuoi? – Abhishek

1

Si può provare questo

Invece di utilizzare Button è possibile utilizzare TextView, funziona lo stesso, come quello che si vuole

<TextView 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:drawableRight="@drawable/right_arrow" 
     android:gravity="center_vertical" 
     android:text="Button" 
     android:paddingLeft="20dp" 
     android:paddingRight="20dp" 
     android:textColor="#ffffff00" /> 

Spero che questo funziona per voi .

+1

"android: padding" ha funzionato con un pulsante, ma non il padding specifico (come "android: paddingLeft"). Cambiare il mio pulsante in un TextView ha risolto il mio problema. Grazie. –

11

L'impostazione di minWidth e minHight sembra fare il trucco per far funzionare correttamente padding e margini con o senza uno sfondo.

<Button 
    android:minHeight="0dp" 
    android:minWidth="0dp" ... 

Per quanto riguarda il motivo per cui lo sfondo fa nulla per come funziona il padding ... Io penso che abbia a che fare con questo pezzo di codice nella View.java

protected int getSuggestedMinimumWidth() { 
    return (mBackground == null) ? mMinWidth : max(mMinWidth, mBackground.getMinimumWidth()); 
} 

protected int getSuggestedMinimumHeight() { 
    return (mBackground == null) ? mMinHeight : max(mMinHeight, mBackground.getMinimumHeight()); 

} 

https://stackoverflow.com/a/20323723/4401507

+0

ora, questa è una soluzione funzionante:) – theapache64

+0

impressionante .. hai finito la mia frustrazione .. – TechieBrij

+0

Questa dovrebbe essere la risposta corretta. –