2011-08-30 10 views
6

Ho due pulsanti che mi piacerebbe apparire affiancati orizzontalmente, ma insieme riempiono la lunghezza orizzontale del telefono. L'altezza è il contenuto dell'involucro, va bene. Il mio problema adesso è che viene visualizzato un solo pulsante (che si estende sullo schermo).Layout pulsante Android: due pulsanti affiancati su tutto lo schermo

Ecco il mio codice XML:

<LinearLayout 
    android:id="@+id/page_buttons" 
    android:orientation="horizontal" 
    android:layout_width="fill_parent" 
    android:layout_height="wrap_content" 
    android:gravity="center_horizontal" 

    > 
    <Button 
     android:id="@+id/prevButton" 
     android:layout_width="fill_parent" 
     android:layout_height="wrap_content" 
     android:text="Previous" 
    /> 

    <Button 
     android:id="@+id/nextButton" 
     android:layout_width="fill_parent" 
     android:layout_height="wrap_content" 
     android:text="Next" 
    /> 

+0

esattamente come ti aspetti che sullo schermo vengano visualizzati due pulsanti, dato che ne hai specificato solo uno in xml? Stai creando dinamicamente il secondo e aggiungendolo al layout lineare? – asenovm

+0

Ho modificato il post per renderlo leggibile ora. – JDS

risposta

23

Cambia la tua pulsanti XML per includere l'attributo layout_weight:

<Button android:id="@+id/nextButton" 
    android:layout_width="fill_parent" 
    android:layout_height="wrap_content" 
    android:layout_weight="1" 
    android:text="Next"/> 
+0

Oltre alla risposta accettata, penso che vale la pena sottolineare che il layout lineare che avvolge i due pulsanti dovrebbe avere l'opzione 'android: orientation = "orizzontale"'. Sono lento e non l'ho capito all'inizio. – w3bshark

5
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
android:orientation="vertical" 
android:layout_width="fill_parent" 
android:layout_height="fill_parent" 
> 
<Button 
android:id="@+id/button01" 
android:layout_width="wrap_content" 
android:layout_height="wrap_content" 
android:layout_below="@id/entry" 
android:layout_alignParentLeft="true" 
android:layout_toLeftOf="@+id/space" 
/> 
<TextView 
android:id="@id/space" 
android:layout_width="wrap_content" 
android:layout_height="wrap_content" 
android:layout_centerHorizontal="true"/> 
<Button 
android:id="@+id/button02" 
android:layout_toRightOf="@id/button01" 
android:layout_width="fill_parent" 
android:layout_height="wrap_content" 
android:layout_below="@id/entry" 
android:layout_alignParentRight="true" 
/> 
</RelativeLayout> 

Sembra che si desidera due pulsanti uguali, non contenuto avvolto. Ho creato uno spaziatore centrato usando TextView e relativamente allineato a quello. Pulsante sinistro a sinistra genitore e distanziale, Pulsante destro a Pulsante sinistro e genitore destro.

0

la vostra esigenza è

<LinearLayout 
    android:id="@+id/page_buttons" 
    android:orientation="horizontal" 
    android:layout_width="fill_parent" 
    android:layout_height="wrap_content" 

    > 
    <Button 
     android:id="@+id/prevButton" 
     android:layout_width="0dp" 
     android:weight="0.5" 
     android:layout_height="wrap_content" 
     android:text="Previous" 
    /> 

    <Button 
     android:id="@+id/nextButton" 
     android:layout_width="0dp" 
     android:weight="0.5" 
     android:layout_height="wrap_content" 
     android:text="Next" 
    /> 
0
<?xml version="1.0" encoding="utf-8"?> 
<RelativeLayout 
    xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="fill_parent" android:layout_height="wrap_content" 
    android:layout_centerHorizontal="true"> 

    <TextView 
     android:text="@+id/SomeText" 
     android:id="@+id/TextView01" 
     android:layout_width="wrap_content" android:layout_height="wrap_content" /> 

    <LinearLayout 
     android:orientation="horizontal" 
     android:background="@android:drawable/bottom_bar" 
     android:paddingLeft="4.0dip" 
     android:paddingTop="5.0dip" 
     android:paddingRight="4.0dip" 
     android:paddingBottom="1.0dip" 
     android:layout_width="fill_parent" android:layout_height="wrap_content" 
     android:layout_below="@+id/TextView01"> 

     <Button 
      android:id="@+id/allow" 
      android:layout_width="0.0dip" android:layout_height="fill_parent" 
      android:text="Allow" 
      android:layout_weight="1.0" /> 

     <Button 
      android:id="@+id/deny" 
      android:layout_width="0.0dip" android:layout_height="fill_parent" 
      android:text="Deny" 
      android:layout_weight="1.0" /> 

    </LinearLayout> 
</RelativeLayout> 
+2

È necessario fornire alcune spiegazioni con il codice. –

13

Dal momento che nessuno sta spiegando il motivo per cui le loro soluzioni funzionano, io darò un andare.

Il problema sta nel layout dei pulsanti. I due attributi interessati sono layout_width e layout_weight.

In altri sistemi di layout, quando si indica che ogni elemento di un layout deve riempire il genitore (layout_width = "fill_parent"), lo fa distribuendo equamente lo spazio del genitore tra di essi. Quindi, ognuno di loro avrebbe le stesse dimensioni.

Invece, nel sistema di layout di Android, se entrambi gli elementi hanno layout_width = "fill_parent" il primo elemento (nel tuo caso, il pulsante Anteprime) sarà allungato per riempire il genitore e il secondo (o terzo , o ecc.) non avrà più spazio per la distribuzione, quindi non sarà visibile.

Ora, per far capire che vuoi mostrare entrambi i pulsanti, devi impostare il peso di layout per ciascun pulsante. Per fare in modo che i pulsanti abbiano le stesse dimensioni, impostare lo stesso peso di layout su entrambi.

Il layout_weight definisce il numero di "parti" (o segmenti) del padre che occupano ciascuno dei pulsanti. Il genitore verrà tagliato in un numero di segmenti pari alla somma dei segmenti dei bambini. Se vuoi fare un pulsante tre volte più grande dell'altro, devi assegnargli il numero di parti uguale al numero di parti del primo pulsante, moltiplicato per tre.

Quindi, se si desidera che il pulsante Avanti per essere due volte più grande poi il pulsante Anteprime, si può fare questo:

  • pulsante Anteprime: layout_weight = 1
  • per pulsante Avanti: layout_weight = 2

di conseguenza, il genitore sarà tagliato in 3 parti, di cui 2 saranno assegnati al pulsante Next e 1 al Prev pulsante di iews.

L'esempio qui riportato è per pulsanti e layout orizzontale, ma questo funzionerà perfettamente per qualsiasi tipo di oggetto e anche per il layout verticale padre.

+0

Grazie mille per la spiegazione – Joqus

1

Il padre del pulsante è Layout lineare e si imposta la larghezza del pulsante come riempimento genitore e quindi occupa tutto lo spazio. Hai due opzioni per implementare questo ...

  1. Dare la larghezza fissa per il pulsante (ad esempio 50dip).
  2. Dare la larghezza 0DP e inserire un attributo ancora a entrambi tasto "peso" e invia 0.5dip per ogni ...
0

Ho trovato il problema principale per le persone che sembrano ancora non ottenere quello che vogliono. quando si utilizzano i pulsanti con lo sfondo convenzionale (predefinito) (predefinito), ha un margine incorporato. Se si tenta modificare manualmente lo sfondo con un solo colore, si può dire facilmente che basta impostare uno sfondo a parte. a parte quello quando hai messo i pesi, funzionerà.

Problemi correlati