Java-метод для Android: layout_gravity - PullRequest
21 голосов
/ 31 мая 2010

Я хотел бы знать, есть ли способ вызвать свойство 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.

Ответы [ 6 ]

30 голосов
/ 01 июня 2010

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

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

с последующим addView с недавно построенным LayoutParams

2 голосов
/ 20 декабря 2012

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);
2 голосов
/ 31 мая 2010

Возможно, я вас неправильно понял, но вот оно:

http://developer.android.com/reference/android/widget/TextView.html#setGravity(int)

1 голос
/ 02 июня 2014

Чтобы изменить атрибут 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. Ссылка на документацию .

1 голос
/ 30 января 2014
button.setBackgroundResource(R.drawable.sound_on);
        button.setText("On");
        button.setGravity(Gravity.CENTER_VERTICAL| Gravity.RIGHT);
        button.invalidate();
0 голосов
/ 14 июня 2015

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

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