2013-05-14 15 views
7

Ecco la mia ToggleButton:centratura ToggleButton Immagine - senza testo

<ToggleButton 
      android:id="@+id/bSmenuTopItems" 
      android:layout_width="wrap_content" 
      android:layout_height="48dp" 
      android:background="@drawable/master_button_selector" 
      android:drawableLeft="@drawable/flame_icon" /> 

non ho il testo in questa immagine, ho bisogno di un ToggleButton a causa di stato attivo.

EDIT: Penso che la domanda sia stata fraintesa. C'è un drawable all'interno del pulsante Toggle (flame_icon) ed è impostato come background. Voglio che sia centrato. Non c'è testo, solo un'immagine. Ho bisogno di un pulsante di commutazione perché ho bisogno di avere uno stato attivo quando selezionato.

solo drawableLeft, drawableRight, drawableTop, ecc voglio un draweableMiddle che non sembra exisit c'è.

+0

(1) perché peso 50? ci sono una tonnellata di oggetti in questa riga che non puoi usare 1 per ciascuno per rappresentare lo stesso peso? (2) che tipo di layout? hai provato layout_gravity invece della sola gravità? o center_horizontal se è un layout relativo? – Rarw

+0

@Rarw È un 'LinearLayout'. Ma perché ciò influenzerebbe ciò che accade all'interno del pulsante? – KickingLettuce

+0

Ho pensato che stavate centrando il pulsante. Stai cercando di centrare l'immagine nel pulsante? – Rarw

risposta

12

Ho rivisto la risposta per rispondere alla domanda rivista.

Il pulsante drawableLeft, drawableRight e drawableTop, per quanto posso dire, controllo in cui l'immagine viene posizionata in relazione al selettore (a/k/a on/off) indicatore. Top lo posizionerà sopra l'indicatore con sinistra e destra, posizionandolo rispettivamente su un lato specifico. Non credo che si possa rimuovere l'indicatore di selezione in quanto ciò vanificherebbe lo scopo dell'uso di ToggleButton.

Sono stato in grado di centrare 2 disegnabili in 2 ToggleButtons utilizzando il seguente layout. Per centrare le immagini all'interno dello ToggleButton ho utilizzato drawableTop in modo che le immagini appaiano sopra l'indicatore di selezione. Ho quindi impostato su textOn e textOff una stringa vuota. Se non lo si imposta, il testo di attivazione/disattivazione predefinito viene visualizzato sopra l'indicatore di selezione e spinge il dispositivo di scrittura sul lato.

<LinearLayout 
    android:id="@+id/buttonContainer" 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    android:gravity="center" 
    android:orientation="horizontal"> 

    <ToggleButton 
    android:id="@+id/bSmenuTopItems" 
     android:layout_width="0" 
     android:layout_weight="1" 
     android:layout_height="75dp" 
     android:checked="false" 
     android:drawableTop="@drawable/flag" 
     android:textOn="" 
     android:textOff="" 
     android:layout_gravity="center" 
     android:textColor="#cecece" /> 

    <ToggleButton 
     android:id="@+id/bSmenuTopItems2" 
     android:layout_width="0" 
     android:layout_height="75dp" 
     android:layout_weight="1" 
     android:checked="false" 
     android:textOn="" 
     android:textOff="" 
     android:drawableTop="@drawable/chaticon" 
     android:layout_gravity="center" 
     android:textColor="#cecece" /> 

</LinearLayout> 

Tutto si dovrebbe avere a che fare è regolare l'altezza del pulsante per posizionare l'icona relativa all'icona di selezione nel punto desiderato. Il mio unico altro suggerimento sarebbe quello di controllare la dimensione dell'immagine che stai usando. Se puoi semplicemente regolare le dimensioni dell'immagine rispetto al pulsante, posizionarlo con drawableTop dovrebbe centrarlo automaticamente.

+0

Scusa, penso che la domanda sia stata fraintesa. L'ho aggiornato. – KickingLettuce

+0

Risposta modificata per rispondere alla domanda – Rarw

+0

@Rarw Sto provando a fare la stessa cosa atm, quindi non c'è alcun metodo per posizionare l'immagine al centro del pulsante senza ridimensionare l'immagine? Sarei preoccupato di come apparirà su più dispositivi ridimensionandolo manualmente (è un problema valido?). –

9

Non ho avuto fortuna con la risposta accettata ma forse il mio scenario è sottilmente diverso. L'altra soluzione che ho visto è usare l'attributo drawablePadding per spingere il topDrawable verso il centro del pulsante. Funziona in un certo modo ma presuppone che le dimensioni del pulsante siano fisse e anche allora, è difficile centrare perfettamente l'icona.

Questo è quello che mi è venuta in mente. Non specificare l'icona sul pulsante stesso. Invece, impostare lo sfondo del pulsante a una drawable layer-list che disegna l'icona desiderata sopra il selettore che si desidera, in questo modo:

<layer-list xmlns:android="http://schemas.android.com/apk/res/android"> 
    <item android:drawable="@drawable/master_button_selector" /> 
    <item> 
     <bitmap android:src="@drawable/flame_icon" android:gravity="center" /> 
    </item> 
</layer-list> 
+0

Funziona come un incantesimo ... non so perché prima non ho pensato a questa soluzione. – Justin

+0

Mi chiedo come funzionerebbe quando è necessario mostrare stati diversi? –

+0

@ClumsyHamster Se sei _icamente curioso, puoi sempre provarlo invece di chiedertelo ad alta voce su StackOverflow. ;) Funziona benissimo. Si noti che il primo '' è un selettore. Le modifiche allo stato del pulsante si propagano ad esso. – spaaarky21

0

ho usato il android:drawableTop come descritto da Rarw, ma come il mio tasto era alto e largo, è semplicemente sospeso in alto. Non proprio centrato ...così ho giocherellava in giro con il paddingTop e potrebbe lavorare qui quello che ho ottenuto:

<ToggleButton 
    android:id="@+id/togglebutton1" 
    android:paddingTop="50dp" 
    android:layout_width="150dp" 
    android:layout_height="150dp" 
    android:layout_gravity="center" 
    android:layout_weight="1" 
    android:drawableTop="@drawable/music_collection_small" 
    android:textOn="" 
    android:textOff="" 

    /> 

penso che lavorerà per i miei scopi

0

Forse this vi aiuterà. Guarda in fondo alla pagina la soluzione da zapl. P.S non sapeva come collegare la risposta specifica, nuovo qui XD

+0

FYI, questa non è davvero una risposta (almeno non di qualità). Si prega di postare un commento una volta che avete abbastanza rep per farlo. –

Problemi correlati