我想知道是否有办法从Java方法调用android:layout_gravity
属性。我没有在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进行所有布局。
答案 0 :(得分:30)
据我所知,您正在寻找this其他布局的FrameLayout是适当的LayoutParams类。要像在XML中那样设置重力,请使用以下内容:
FrameLayout.LayoutParams params = new FrameLayout.LayoutParams(LayoutParams.WRAP_CONTENT,LayoutParams.WRAP_CONTENT,Gravity.LEFT | Gravity.CENTER_VERTICAL)
后跟addView
新构建的LayoutParams
答案 1 :(得分:2)
答案 2 :(得分:2)
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);
答案 3 :(得分:1)
button.setBackgroundResource(R.drawable.sound_on);
button.setText("On");
button.setGravity(Gravity.CENTER_VERTICAL| Gravity.RIGHT);
button.invalidate();
答案 4 :(得分:1)
更改现有视图的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属性。 Documentation link
答案 5 :(得分:-1)
在添加按钮之前,您应该更改布局的方向
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);