我的问题很简单,

如何设置我的按钮layout_gravity编程?

我在互联网上找到了这个,但它只是抛出了一个空指针异常:

 Button MyButton = new Button(this);

    LinearLayout.LayoutParams  lllp=(LinearLayout.LayoutParams)MyButton.getLayoutParams();
    lllp.gravity=Gravity.RIGHT;
    MyButton.setLayoutParams(lllp); 


    MyLinearLayout.addView(MyButton);

有解决方案吗?


当前回答

MyButton.setGravity(Gravity.RIGHT);

对于layout_gravity使用“karthi”给出的答案。这个方法设置重力以将子视图放置在视图中。

其他回答

我讨厌复活旧线程,但这是一个没有正确回答的问题,而且我自己也遇到过这个问题。

下面是比较长的部分,如果你只对答案感兴趣,请一直向下滚动到代码:

Android:gravity和Android:layout_gravity工作方式不同。这是我读过的一篇帮助我的文章。

文章要点:重力在高度/宽度分配后影响视图。因此重心不会影响FILL_PARENT(认为它是自动边距)完成的视图。layout_gravity centre将影响视图FILL_PARENT(认为它是auto pad)。

基本上,android:layout_gravity不能通过编程方式访问,只能访问android:gravity。 在OP的情况下,我的情况下,接受的答案没有把按钮垂直中心。

为了完善Karthi的回答:

LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(
LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT);
params.gravity = Gravity.CENTER;
button.setLayoutParams(params);

链接到LinearLayout.LayoutParams。

android:layout_gravity显示“No related methods”,意思是不能通过编程方式访问。 而重力在课堂上是一个场。

这个问题很老了,但我遇到过同样的问题,并像这样解决了它

LayoutParams lay = new LayoutParams(LayoutParams.FILL_PARENT,LayoutParams.FILL_PARENT)
lay.gravity = Gravity.CENTER;

以上大部分答案都是对的,所以写了一个辅助方法,让你可以使用它 直接在你的项目中。

以编程方式设置layout_gravity

// gravity types : Gravity.BOTTOM, Gravity.START etc.
// view : can be any view example : button, textview, linearlayout, image etc.

// for single view
   public static void setLayoutGravity(int gravity, View view){
     ((LinearLayout.LayoutParams) view.getLayoutParams()).gravity = gravity;
    }


// for mulitple views
  public static void setLayoutGravity(int gravity, View ...view){
        for(View item : view)
            ((LinearLayout.LayoutParams) item.getLayoutParams()).gravity = gravity;
    }

到RelativeLayout,试试这段代码,它为我工作: yourLayoutParams.addRule (RelativeLayout.ALIGN_PARENT_RIGHT);

如果你想把一个视图放在父母的中心,你可以用下面的代码。

public class myLayout extends LinearLayout {

    public myLayout(Context context) {
      super(context);

      RelativeLayout vi = (RelativeLayout) ((LayoutInflater) context
            .getSystemService(Context.LAYOUT_INFLATER_SERVICE)).inflate(
            R.layout.activity_main, null);
      LinearLayout.LayoutParams cc = new LinearLayout.LayoutParams(
            LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT);
      cc.gravity = Gravity.CENTER;
      this.setGravity(Gravity.CENTER);
      this.addView(vi);
  }
}

这些代码部分使得LinearLayout把第一个视图元素放在父元素的中心。 因此,我们的系统不考虑初始的宽度和高度来安排在中心的视图。 代码部分我做得很好。