2009-09-11 4 views
47

Ho uno EditText e uno Button impostati uno accanto all'altro sulla stessa linea orizzontale. Sembra fantastico, tranne quando l'utente inserisce molto testo, lo EditText viene ridimensionato e lo Button viene squished.Come impedire a un EditText di ridimensionarsi da solo quando l'utente sta digitando?

Ho entrambi EditText e Button impostato su layout_width="wrap_content". "fill_parent" rovina il layout e non voglio usare le dimensioni assolute se non è necessario: il modo in cui ora è ottimo sia in orizzontale che in verticale, non voglio che lo EditText ridimensioni.

mio layout:

<TableLayout 
    android:id="@+id/homelayout" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent" > 

    <TableRow> 
     <TextView 
      android:id="@+id/labelartist" 
      android:layout_width="fill_parent" 
      android:layout_height="wrap_content" 
      android:text="Find artists:" /> 
    </TableRow> 
    <TableRow> 
     <EditText 
      android:id="@+id/entryartist" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:layout_weight="6" 
      android:background="@android:drawable/editbox_background" 
      android:editable="true" 
      android:padding="5px" 
      android:singleLine="true" /> 
     <Button 
      android:id="@+id/okartist" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:layout_alignParentRight="true" 
      android:layout_marginLeft="10dip" 
      android:layout_weight="1" 
      android:text="Search" /> 
    </TableRow> 

</TableLayout> 

risposta

85

Per EditText utilizzare

android:layout_width="0dp" - not required but preferred. 
android:layout_weight="1" 

E per Button non specifichi android:layout_weight

+0

Grazie - ha fatto il trucco! Cosa significa "0dp" per la larghezza? Che dovrebbe occupare tutto lo spazio disponibile? –

+1

sì, lo farà. Il tag layout_weight lo farà. – bhatt4982

+1

Non dimenticare di rimuovere (se presente) 'android: stretchColumns =" ​​x "' nel tuo 'TableLayout', dove" x "è la posizione della colonna che contiene il' EditText' che non vuoi ridimensionare automaticamente. – Caumons

5

Dare EditText un maxWidth. Questo dovrebbe impedirgli di ridimensionare oltre la larghezza che hai fornito. Inoltre, se si desidera che sia contenuto entro 1 riga, impostare maxLines su 1.

+3

Grazie - Non voglio davvero hardcode una specifica maxwidth, dal momento che non sarebbe la stessa per i diversi orientamenti o formati di schermo. –

+1

+1 per il suggerimento su 'maxLines', fa davvero il trucco. –

0

Ho avuto un problema simile, ma non ho potuto ottenere quanto sopra al lavoro. Quello che ho fatto è prendere il testo dalla casella EditText e quindi ridurlo alla dimensione massima che il mio schermo potrebbe gestire. Quando lo salvi nel DB, lo salverò come testo di visualizzazione e testo originale.

Se vai to this page ho messo una spiegazione più lunga.

2

Basta usare:

android:layout_width="fill_parent" 

sia per EditText e Button. Funzionerà anche per EditText, ma è meglio averlo su entrambi.

0

Il modo corretto per farlo sarebbe impostare Android: minWidth e android: maxWidth uguale alla larghezza desiderata. In questo modo non dovrai modificare il layout per utilizzare Android: layout_weight.

Per esempio, se volete che il vostro EditText di essere sempre 80 pixel densità indipendentemente dal numero di caratteri digitati in uso il seguente:

android:minWidth="80dp" 
android:maxWidth="80dp" 
14

Quello che faccio è in onCreate per l'attività, misurare l'EditText prima quindi applica la sua larghezza massima.

È possibile farlo utilizzando il codice simile al seguente:

EditText someedittext = (EditText)findViewById(R.id.sometextview); 
someedittext.setMaxWidth(someedittext.getWidth()); 
+1

Soluzione migliore! –

+0

Grazie mille amico ... nessun soln ha funzionato per me ma questo. – kgandroid

1

è possibile definire dimensioni del vostro EditText in quanto mostra sopra

android:minWidth="80dp" 
android:maxWidth="80dp" 

o

android:layout_width="60dp" 

o

è possibile applicare un'immagine di sfondo della dimensione desiderata ma non dimenticare di definirne l'altezza e la larghezza con wrap_content.

android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
0

Ho avuto la query esatta. Ma avevo un EditText e un Button uno accanto all'altro in un layout lineare. Ho provato android: layout_weight = "1" per EditText android: layout_width = "0dp" E ha funzionato perfettamente !! Grazie mille!

1

enter image description here

è necessario aggiungere Android: imeOptions per impedire questo comportamento.

Click here