Come posso impedire a un EditText di ridimensionarsi automaticamente quando l'utente sta digitando?
-
05-07-2019 - |
Domanda
Ho un EditText
e un Button
posti uno accanto all'altro sulla stessa linea orizzontale. Sembra fantastico, tranne quando l'utente immette molto testo, il EditText
viene ridimensionato e il Button
viene schiacciato.
Ho entrambi EditText
e Button
impostati su layout_width = " wrap_content "
. " fill_parent "
incasina il layout e non voglio usare dimensioni assolute se non devo - il modo in cui ora sembra fantastico sia in orizzontale che in verticale, non faccio altro non vuoi che il EditText
venga ridimensionato.
Il 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>
Soluzione
Per EditText usa
android:layout_width="0dp" - not required but preferred.
android:layout_weight="1"
E per Button non specificare android:layout_weight
Altri suggerimenti
Quello che faccio è in onCreate per l'attività, misurare prima il EditText quindi applicare la sua maxWidth.
Puoi farlo usando un codice simile al seguente:
EditText someedittext = (EditText)findViewById(R.id.sometextview);
someedittext.setMaxWidth(someedittext.getWidth());
Assegna a EditText
un maxWidth
. Ciò dovrebbe impedirne il ridimensionamento oltre la larghezza fornita. Inoltre, se vuoi che sia contenuto in 1 riga, imposta anche maxLines
su 1
Usa solo:
android:layout_width="fill_parent"
sia per EditText che per Button. Funzionerà anche per EditText ma è meglio averlo su entrambi.
puoi definire la dimensione del tuo edittext come mostrato sopra
android:minWidth="80dp"
android:maxWidth="80dp"
o
android:layout_width="60dp"
o
puoi applicare un'immagine di sfondo delle dimensioni che desideri ma non dimenticare di definirne l'altezza e la larghezza con wrap_content.
android:layout_width="wrap_content"
android:layout_height="wrap_content"
Ho avuto un problema simile, ma non sono riuscito a far funzionare quanto sopra. Quello che ho fatto, è prendere il testo dalla casella EditText e quindi formattarlo fino alla dimensione massima che il mio schermo potrebbe gestire. Quando lo salverò sul DB, lo salverò come testo di visualizzazione e testo originale.
Se vai a questa pagina ho inserito una spiegazione più lunga.
Il modo corretto di fare questo sarebbe impostare android: minWidth e android: maxWidth pari alla larghezza desiderata. In questo modo non dovrai modificare il layout per utilizzare Android: layout_weight.
Ad esempio, se vuoi che il tuo EditText sia sempre pixel a 80 densità, indipendentemente dal numero di caratteri digitati, utilizza quanto segue:
android:minWidth="80dp"
android:maxWidth="80dp"
Ho avuto la query esatta. Ma avevo un EditText e un pulsante uno accanto all'altro in un layout lineare. Ho provato android: layout_weight = " 1 " per EditText android: layout_width = " 0DP " E ha funzionato perfettamente !! Molte grazie!
La soluzione scelta funziona, ma vorrei aggiungere un piccolo complemento:
se usi
android: layout_weight = " 0.15 "
(il valore non è importante)
poi
android: layout_width = " 0dp "
se il LinearLayout
è orizzontale
o
android: layout_height = " 0dp "
se il LinearLayout
è verticale.