2010-11-15 25 views
51

Voglio mettere un pulsante accanto a un EditText e voglio che le loro altezze corrispondano.Come ottenere l'altezza di un pulsante in modo che corrisponda all'altezza di un altro elemento?

Ad esempio, dal costruito nel browser Android:

alt text

Il pulsante Go è la stessa altezza del campo EditText. So che potrei avvolgere entrambe queste viste in una vista di layout principale e impostare entrambe le loro altezze su fill_parent, e questo le farebbe corrispondere. Tuttavia, mi piacerebbe farlo senza dover dare al layout una dimensione statica. Preferirei che EditText prendesse l'altezza necessaria in base alla dimensione del carattere e quindi il pulsante accanto a esso corrisponda all'altezza che potrebbe essere.

Ciò è possibile con un layout xml?

+1

Questa domanda ha bisogno di essere aggiornato per includere il nuovo ConstraintLayout. –

risposta

27

È necessario rendere il EditTextwrap_content all'altezza e avere il Button solo fill_parent. Dovrai averli entrambi avvolti in un genitore Layout. In questo modo sono associati allo stesso genitore Layout.

Provalo e guarda come funziona, se mi aiuta a farmelo sapere. Se così non fosse, posso darti un codice che ti aiuterà.

+0

Grazie per l'offerta di aiuto ma la risposta di Falmarri ha funzionato perfettamente, quindi sono a posto. Grazie ancora. – cottonBallPaws

+0

In realtà, dopo aver provato a farlo senza una vista wrapper, non ero in grado di allineare correttamente il pulsante sul lato destro del testo a causa del problema che ho descritto in risposta alla risposta di Falmarri. Usando il tuo metodo sono riuscito a far sì che il pulsante fosse dimensionato e posizionato correttamente, quindi contrassegnerò il tuo come risposta. – cottonBallPaws

57

Presumibilmente EditText e Button sono all'interno di un RelativeLayout. Impostare gli attributi di layout del pulsante su alignTop e alignBottom su EditText.

+2

Questo ha funzionato magnificamente e non richiede un involucro, grazie mille. – cottonBallPaws

+2

Come posso visualizzare EditText a sinistra del pulsante? Ho provato a usare layout_toLeftOf = "l'id del pulsante" su EditText ma poiché il pulsante è dichiarato dopo EditText nel file xml, ottengo un errore che l'id del pulsante non esiste. Non posso invertirli perché ho lo stesso problema, il pulsante si riferisce all'id di EditText per l'allineamento come hai descritto. Qualche suggerimento su come affrontare questo? Grazie – cottonBallPaws

15

Quello che vuoi è un layout relativo. Un esempio con alcuni commenti è il seguente

Iniziamo con questo RelativeLayout come genitore. Questo può avvolgere tutto il contenuto. In quel genitore mettiamo 2 elementi, il pulsante e il testo edituale dal tuo esempio.

<?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="fill_parent" > 

Iniziamo posizionando l'elemento Button nell'angolo in alto a destra. Questo è ciò che sono il layout_alignParentRight e layout_alignParentTop. Ancora una volta questo è l'elemento più importante, quindi lasceremo che avvolga tutto il contenuto utilizzando wrap_content per l'altezza e la larghezza.

<Button 
    android:id="@+id/Button1" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:layout_alignParentRight="true" 
    android:layout_alignParentTop="true" 
    android:text="some_text" /> 

Ora il secondo elemento, l'EditText vogliamo allineare il lato sinistro del nostro elemento precedente, utilizzare il riferimento id con il parametro layout_toLeftOf a realizzare proprio questo.

<EditText 
    android:id="@+id/EditText1" 
    android:layout_width="fill_parent" 
    android:layout_height="wrap_content" 
    android:layout_toLeftOf="@+id/Button1" 
    android:hint="some_hint" 
    android:inputType="textCapWords" /> 

Chiudere RelativeLayout e ora eseguire il rendering per vedere ciò che si è già ottenuto da soli.

</RelativeLayout> 

enter image description here

Dal momento che l'EditText è più piccolo in altezza non corrisponderà il pulsante è collocato accanto. La soluzione è aggiungere altri parametri di layout.Quelli magici che stai cercando sono layout_alignBottom e layout_alignParentTop.

android:layout_alignBottom="@+id/Button1" 
    android:layout_alignParentTop="true" 

Aggiungi questi 2 e ottieni il layout giusto.

enter image description here

+0

non funzionerà per il layout lineare! –

+2

@farhan patel ecco perché inizio la spiegazione dicendo che hai bisogno di un layout relativo ;-) – hcpl

Problemi correlati