2010-08-11 13 views
5

Chcę utworzyć pole wprowadzania za pomocą przycisku przesyłania po prawej stronie. Pomiędzy nimi powinny rozciągać się na szerokość ekranu. Obecnie mam:LinearLayout wypełniony od prawej do lewej

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); 

Wynika to w prawidłowym podziale przestrzeni: Przycisk submit objęciem tyle miejsca, ile potrzebuje, przycisk wejścia objęciem pozostałą przestrzeń, jednak są one źle odwrotnie (the przycisk przesyłania jest po lewej stronie, pomimo ustawienia siły grawitacji). Jeśli usunę grawitację i odwrócę kolejność dodawania elementów do wiersza, pole wprowadzania zajmuje całą szerokość ekranu, a przycisk przesyłania nie jest widoczny. Co ja robię źle?

Odpowiedz

4

powiedziałbym, że lepiej jest użyć układ względny i umieścić wejście po lewej stronie przycisku. Ale jeśli naprawdę potrzebujesz to z układu liniowego można po prostu użyć parametru Waga:

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

I tak, myślę, że nie jest dobrym pomysłem tworzenie układów z kodu. Zrób to tylko wtedy, gdy układ xml jest absolutnie niemożliwy dla twojego przypadku. –

+0

Nadal jestem względnie nowy na Androida i do tej pory wszystko w tym projekcie jest oparte na kodzie. Będę używał xml w przyszłych projektach, ale na razie wezmę rozwiązanie kodu. – fredley

0

Przedmioty ułożone w LinearLayout w kolejności, w jakiej zostały dodane. Zmień swoje dwa połączenia addView.

Zwykle łatwiej jest uzyskać odpowiedni układ z plikami xml układu. Tj:

<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. Wydaje się sprzeczne intuicyjnie, że powinienem ustawić Grawitację na PRAWĄ, wtedy rzeczy powinny się układać z lewej strony. No cóż. – fredley

+0

To nie jest to, co oznacza grawitacja: http://developer.android.com/reference/android/view/Gravity.html –

3

spróbuj dodać EditText pierwszym ustawieniu jego szerokość do fill parent a jego waga do 1, a następnie przycisk (width = wrap content)

0

Jeśli trzeba także wyrównać przyciski w następnym wierszu, można również użyć TableLayout. Spójrz na apidemos dla próbki kodu.

Powiązane problemy