LinearLayout заполняется справа налево - PullRequest
5 голосов
/ 11 августа 2010

Я хочу создать поле ввода с кнопкой отправки справа.Между ними они должны охватывать ширину экрана.В настоящее время у меня есть:

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

Это приводит к правильному распределению пространства: кнопка отправки занимает столько места, сколько нужно, кнопка ввода занимает оставшееся пространство, однако они неправильные(кнопка отправки находится слева, несмотря на установку гравитации).Если я уберу гравитацию и поменяю порядок добавления элементов в строку, поле ввода займет всю ширину экрана, а кнопка отправки не будет видна.Что я делаю не так?

Ответы [ 4 ]

4 голосов
/ 11 августа 2010

Я бы сказал, что лучше использовать относительную компоновку и размещать ввод слева от кнопки. Но если вам действительно нужно это с линейным макетом, вы можете просто использовать весовой параметр:

    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);
3 голосов
/ 11 августа 2010

Попробуйте добавить EditText, сначала установив его ширину fill parent и его вес 1, затем кнопку (width = wrap content)

0 голосов
/ 12 августа 2010

Если вам также нужно расположить кнопки на следующей строке, вы также можете использовать TableLayout.Посмотрите на пример кода.

0 голосов
/ 11 августа 2010

Элементы складываются в LinearLayout в том порядке, в котором вы их добавили.Переключите два вызова addView.

Как правило, проще получить правильный макет с помощью файлов макета XML.Т.е.:

<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>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...