2010-08-11 22 views
5

Ich möchte ein Eingabefeld mit einer Absenden-Schaltfläche auf der rechten Seite erstellen. Zwischen ihnen sollten sie die Breite des Bildschirms überspannen. Zur Zeit habe ich:LinearLayout gefüllt von rechts nach links

LinearLayout row= new LinearLayout(context); 
row.setOrientation(HORIZONTAL); 
row.setGravity(Gravity.RIGHT); 
EditText input = new EditText(context); 
Button submit = new Button(context); 
submit.setText("Submit"); 
row.addView(submit); 
row.addView(input,LayoutParams.FILL_PARENT,LayoutParams.WRAP_CONTENT); 
myView.addView(row,LayoutParams.FILL_PARENT,LayoutParams.WRAP_CONTENT); 

Daraus ergibt sich die korrekte Verteilung des Raumes: Der Submit-Button so viel Platz einnimmt, wie es braucht, die Eingabe Taste, um den verbleibenden Platz einnimmt, aber sie sind falsch herum (die Sendeknopf ist auf der linken Seite, trotz der Einstellung der Schwerkraft). Wenn ich die Schwerkraft wegnehme und die Reihenfolge des Hinzufügens der Elemente zur Reihe umkehre, nimmt das Eingabefeld die gesamte Breite des Bildschirms ein, und die Übergabeschaltfläche ist nicht sichtbar. Was mache ich falsch?

Antwort

4

Ich würde sagen, dass es besser ist relativ Layout zu verwenden und platzieren Eingang links neben dem Knopf. Aber wenn Sie wirklich diese müssen mit Linear-Layout können Sie nur Gewicht Parameter verwenden:

LinearLayout row= new LinearLayout(context); 
    EditText input = new EditText(context); 
    Button submit = new Button(context); 
    submit.setText("Submit"); 
    LayoutParams inputParams = new LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT); 
    inputParams.weight = 1; 
    row.addView(input,inputParams); 
    LayoutParams buttonParams = new LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT); 
    buttonParams.weight = 0; 
    row.addView(submit, buttonParams); 
+1

Und ja, ich denke, dass es keine gute Idee ist, Layouts aus Code zu erstellen. Tun Sie dies nur, wenn das XML-Layout für Ihren Fall absolut nicht möglich ist. –

+0

Ich bin noch relativ neu in Android, und bisher ist alles in diesem Projekt Code-basiert. Ich werde XML in zukünftigen Projekten verwenden, aber jetzt nehme ich die Codelösung. – fredley

0

Elemente werden in der Reihenfolge, in der Sie sie hinzugefügt haben, in einem LinearLayout gestapelt. Schalten Sie Ihre beiden addView-Aufrufe um.

Es ist in der Regel leichter, das richtige Layout mit den Layout-XML-Dateien zu erreichen. Dh:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:orientation="horizontal" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent"> 
    <EditText 
      android:layout_width="fill_parent" 
      android:layout_height="wrap_content"/> 

    <Button 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content"/> 
</LinearLayout> 
+0

Hmmm. Es scheint kontraintuitiv zu sein, dass ich die Gravitation auf RECHTS stellen sollte, dann sollten die Dinge von links aufstapeln. Naja. – fredley

+0

Das ist nicht, was Schwerkraft bedeutet: http://developer.android.com/reference/android/view/Gravity.html –

3

Versuchen Hinzufügen EditText zuerst seine Breite zu fill parent Einstellung und sein Gewicht auf 1, dann auf die Schaltfläche (width = wrap content)

0

Wenn Sie auch Tasten auf der nächsten Zeile müssen in einer Reihe aufstellen, können Sie auch eine Tablelayout verwenden. Sehen Sie sich die Apidemien für das Codebeispiel an.