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.
Ответы
Ответ 1
Хорошо, насколько я понимаю, вы ищете this. Для FrameLayout для другого макета см. соответствующие классы LayoutParams. Для установки гравитации, как в вашем XML, используйте что-то вроде:
FrameLayout.LayoutParams params = new FrameLayout.LayoutParams(LayoutParams.WRAP_CONTENT,LayoutParams.WRAP_CONTENT,Gravity.LEFT | Gravity.CENTER_VERTICAL)
а затем addView
с недавно построенным LayoutParams
Ответ 2
Возможно, я неправильно понимаю вас, но вот он:
http://developer.android.com/reference/android/widget/TextView.html#setGravity(int)
Ответ 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);