我的问题很简单,

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

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

 Button MyButton = new Button(this);

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


    MyLinearLayout.addView(MyButton);

有解决方案吗?


当前回答

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

其他回答

如果你想改变现有视图的layou_gravity,可以这样做:

((FrameLayout.LayoutParams) view.getLayoutParams()).gravity = Gravity.BOTTOM;

记住要根据视图所在的布局类型使用正确的LayoutParams。例:

LinearLayout.LayoutParams

完美的工作! !以上答案都不适合我。在Xml文件中设置gravity和设置layout_gravity是不同的。检查下面的代码

// here messageLL is the linear layout in the xml file
// Before adding any view just remove all views
   messageLL.removeAllViews();
// FrameLayout is the parent for LinearLayout
FrameLayout.LayoutParams params = new 
   FrameLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT);
   params.gravity = Gravity.CENTER|Gravity.CENTER_VERTICAL;
   messageLL.setLayoutParams(params);
   messageText.setVisibility(View.GONE);
   messageNoText.setVisibility(View.VISIBLE);
   messageLL.addView(messageNoText);

也检查这个,在那里你可以找到关于重力和layout_gravity的清楚解释。

KOTLIN在FrameLayout上设置多个重力而不改变大小:

     // assign more than one gravity,Using the operator "or"
    var gravity = Gravity.RIGHT or Gravity.CENTER_VERTICAL
     // update gravity
    (pagerContainer.layoutParams as FrameLayout.LayoutParams).gravity = gravity
     // refresh layout
     pagerContainer.requestLayout()

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

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

以编程方式设置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;
    }