Подтвердить что ты не робот

Java-метод для android: layout_gravity

Я хотел бы знать, есть ли способ вызвать свойство android:layout_gravity из метода Java. Для этого я не нашел никакого способа в документации на Android. Это изображение макета, который я хочу реализовать:

http://www.anddev.org/resources/image/2234

Я знаю, как это сделать через XML, как показано ниже:

<FrameLayout
    xlmns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content">

      <Button
         android:layout_gravity="left|center_vertical"
         android:layout_width="wrap_content"
         android:layout_height="wrap_content"
         android:text="<" />


      <Button
         android:layout_gravity="right|center_vertical"
         android:layout_width="wrap_content"
         android:layout_height="wrap_content"
         android:text=">" />
</FrameLayout>

Но в моей ситуации мне нужно сделать это с помощью Java-кода, потому что я буду динамически выполнять другие макеты. Чтобы избежать слияния XML-макета с Java-кодом, я бы предпочел сделать весь макет с помощью Java.

4b9b3361

Ответ 1

Хорошо, насколько я понимаю, вы ищете this. Для FrameLayout для другого макета см. соответствующие классы LayoutParams. Для установки гравитации, как в вашем XML, используйте что-то вроде:

FrameLayout.LayoutParams params = new FrameLayout.LayoutParams(LayoutParams.WRAP_CONTENT,LayoutParams.WRAP_CONTENT,Gravity.LEFT | Gravity.CENTER_VERTICAL)

а затем addView с недавно построенным LayoutParams

Ответ 3

Watchout! Однако это не с LinearLayout. Поскольку конструктор LinearLayout.LayoutParams(...) отличается от конструктора FrameLayout.LayoutParams(...). Третий параметр - не гравитация, а вес.

     LinearLayout.LayoutParams(int width, int height, float weight)

в отличие от

     FrameLayout.LayoutParams(int width, int height, int gravity)

и этот вызов, несмотря на то, что ошибка не производить компилятора на самом деле неверна:

lparams = new LinearLayout.LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT, Gravity.LEFT);

Ответ 4

button.setBackgroundResource(R.drawable.sound_on);
        button.setText("On");
        button.setGravity(Gravity.CENTER_VERTICAL| Gravity.RIGHT);
        button.invalidate();

Ответ 5

Чтобы изменить атрибут layout_gravity для существующего представления:

Button button = (Button) findViewById(R.id.some_button);
FrameLayout.LayoutParams params;
params = (LayoutParams) button.getLayoutParams();

params.gravity = Gravity.BOTTOM | Gravity.CENTER_HORIZONTAL;
button.setLayoutParams(params);

Кнопка содержится в FrameLayout, которая имеет атрибут gravity, соответствующий атрибуту layout_gravity XML. Ссылка документации.

Ответ 6

перед добавлением кнопки вы должны изменить ориентацию своего макета

yourbutton.setGravity(Gravity.RIGHT);
LayoutParams layout = new LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT, Gravity.RIGHT);
layout.gravity = Gravity.RIGHT;
yourbutton.setLayoutParams(layout);


yourlayout.setGravity(Gravity.RIGHT);
yourlayout.addView(yourbutton);