Java方法用于android:layout_gravity

21
我想知道是否有一种方法可以从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来创建所有的布局。


1
顺便说一句,在这里不需要将其标记为社区维基 ;) - RoflcoptrException
6个回答

30

据我所了解,您正在寻找这个。它是用于FrameLayout的,对于其他布局,请参见相应的LayoutParams类。要像在XML中设置重力一样,请使用以下代码:

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

使用新构造的LayoutParams,然后跟随addView


3
没有CENTRAL_VERTICAL这个选项,应该改为CENTER_VERTICAL - Mithun Sreedharan
而 WRAP_CONTENT 应该是 ViewGroup.LayoutParams.WRAP_CONTENT - Simon Forsberg
如果我错了,请有人纠正我,但这不是设置对象的“重力”而不是“布局重力”吗?我认为OP正在寻找“布局重力”。 - BriCo84
@ BriCo84:不是重力,而是它的LayoutParams布局参数。 - xmen

2

注意!这个方法对于LinearLayout不适用。因为LinearLayout.LayoutParams(...) 的构造函数不同于FrameLayout.LayoutParams(...)的构造函数。第三个参数不是gravity而是weight。

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

虽然你不能通过构造函数设置重力,但是LinearLayout.LayoutParams的重力字段是公共的,所以你可以从那里使用重力。 - user3426273

2

4
很遗憾,这是 TextView 中文本的对齐方式,而不是 TextView 本身布局的对齐方式。 - Steve Haley
你也可以将它用于按钮。该按钮会继承它。 - anon
是的,史蒂夫。=(不幸的是,这就是文本的重力,与android:gravity相同。 - André Leitão

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 中,该布局具有与 layout_gravity XML 属性对应的 gravity 属性。文档链接

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

layout_gravity和gravity不是同一回事。Gravity是你的子元素的重力。Layout gravity是你告诉父级布局你想要的重力方向。 - MinceMan

-2
在添加按钮之前,您应该更改布局的方向。
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);

这个回答如何解决问题? - Nick Volynkin

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接