【问题标题】:Java method for android:layout_gravityandroid的Java方法:layout_gravity
【发布时间】:2011-02-26 01:58:34
【问题描述】:

我想知道是否有办法从 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 来制作所有布局。

【问题讨论】:

  • 顺便说一句,这里没有必要将其标记为社区 wiki ;)

标签: java android layout


【解决方案1】:

【讨论】:

  • 不幸的是,这是 TextView 中文本的重力,而不是 TextView 本身布局的重力。
  • 您也可以将它用于按钮。按钮继承它
  • 是的,史蒂夫。 =( 不幸的是,这是文本的重力,与 android:gravity 相同。
【解决方案2】:

据我了解,您正在寻找this 它是用于其他布局的 FrameLayout,请参阅适当的 LayoutParams 类。要在 XML 中设置重力,请使用以下内容:

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

紧随其后的是addView和新建的LayoutParams

【讨论】:

  • 没有CENTRAL_VERTICAL,应该是CENTER_VERTICAL
  • 并且 WRAP_CONTENT 应该是ViewGroup.LayoutParams.WRAP_CONTENT
  • 如果我错了,有人纠正我,但这不是设置对象的“重力”而不是“布局重力”吗?我相信 OP 正在寻找“布局重力”
  • @BriCo84 :不,它的布局重力,因为它的LayoutParams
【解决方案3】:

小心!不过,这不适用于 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);

【讨论】:

  • 虽然你不能通过构造函数设置重力,但是 LinearLayout.LayoutParams 的重力场是公开的,所以你可以从那里使用重力
【解决方案4】:
button.setBackgroundResource(R.drawable.sound_on);
        button.setText("On");
        button.setGravity(Gravity.CENTER_VERTICAL| Gravity.RIGHT);
        button.invalidate();

【讨论】:

  • layout_gravity 与重力不同。重力是你孩子的重力。布局重力是你告诉你的父布局你想要你的重力是什么。
【解决方案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 属性。 Documentation link.

【讨论】:

    【解决方案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);
    

    【讨论】:

    • 这如何回答这个问题?
    猜你喜欢
    • 2017-05-03
    • 1970-01-01
    • 2013-01-21
    • 1970-01-01
    • 2014-03-12
    • 2013-03-31
    • 2011-03-29
    • 1970-01-01
    相关资源
    最近更新 更多