2009-09-11 10 views
47

Ich habe eine EditText und eine Button nebeneinander auf der gleichen horizontalen Linie. Es sieht gut aus, außer wenn der Benutzer viel Text eingibt, wird die EditText Größe geändert, und die Button wird gequetscht.Wie verhindere ich, dass EditText sich selbst verändert, wenn der Benutzer tippt?

Ich habe sowohl EditText als auch Button auf layout_width="wrap_content" eingestellt. "fill_parent" vermasselt das Layout, und ich möchte keine absoluten Größen verwenden, wenn ich nicht muss - die Art, wie es jetzt sowohl im Querformat als auch im Porträt aussieht, möchte ich nicht die EditText Größe ändern.

Mein 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> 

Antwort

85

Für EditText

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

Und für Button geben nicht android:layout_weight

+0

Danke - das hat den Trick gemacht! Was bedeutet "0dp" für die Breite? Dass es den gesamten verfügbaren Platz einnehmen sollte? –

+1

ja, wird es. Das layout_weight-Tag wird dies tun. – bhatt4982

+1

Vergessen Sie nicht, (falls vorhanden) 'android: stretchColumns =" ​​x "' in Ihrem 'TableLayout' zu entfernen, wobei" x "die Spaltenposition ist, die den' EditText' enthält, dessen Größe nicht automatisch geändert werden soll. – Caumons

5

Geben EditText ein maxWidth. Das sollte verhindern, dass die Größe über die von Ihnen angegebene Breite hinaus geändert wird. Wenn Sie möchten, dass es innerhalb einer Zeile enthalten ist, setzen Sie die Einstellung maxLines ebenfalls auf 1.

+3

Danke - ich will nicht wirklich eine bestimmte maxWidth codieren, da es nicht das gleiche für verschiedene Orientierungen oder Bildschirmgrößen sein würde. –

+1

+1 für den Tipp auf 'maxLines', es macht wirklich den Trick. –

0

ich hatte ein ähnliches Problem, aber ich konnte die oben arbeiten nicht bekommen. Was ich getan habe, ist den Text aus dem EditText-Feld aufzunehmen und dann auf die maximale Größe zu formatieren, die mein Bildschirm verarbeiten könnte. Wenn ich das in der Datenbank abspeichere, speichere ich es als Anzeigetext und Originaltext.

Wenn Sie to this page gehen, lege ich eine längere Erklärung.

2

Verwenden Sie einfach:

android:layout_width="fill_parent" 

sowohl für EditText und Button. Es funktioniert auch für EditText, aber es ist besser, es auf beiden zu haben.

0

Der richtige Weg, dies zu tun wäre, die android: minWidth und android: maxWidth gleich der gewünschten Breite zu setzen. Auf diese Weise müssen Sie Ihr Layout nicht anpassen, um das android: layout_weight zu verwenden. die folgende

Zum Beispiel, wenn Sie Ihre EditText immer 80 Dichte Pixel zu sein, egal, wie viele Zeichen, die Sie im Einsatz Typ:

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

Was ich tue, ist in der onCreate für die Aktivität, messen Sie die EditText zuerst wenden Sie dann seine maxWidth an.

können Sie dies Code ähnlich dem folgenden:

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

Bessere Lösung! –

+0

Vielen Dank Mann ... kein Soln arbeitete für mich aber dieses. – kgandroid

1

Sie die Größe Ihrer EditText definieren kann, wie es oben

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

oder

zeigt
android:layout_width="60dp" 

oder

können Sie ein Hintergrundbild der gewünschten Größe anwenden aber vergessen Sie nicht, seine Höhe und Breite mit wrap_content zu definieren.

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

Ich hatte die genaue Abfrage. Aber ich hatte einen EditText und einen Button nebeneinander in einem linearen Layout. Ich versuchte android: layout_weight = "1" für EditText android: layout_width = "0DP" Und es funktionierte einfach perfekt !! Vielen Dank!

1

enter image description here

Sie benötigen android hinzuzufügen: imeOptions dieses Verhalten zu verhindern.

Click here