如何以编程方式设置layout_gravity?

我的问题很简单,

如何以编程方式设置我的buttonlayout_gravity?

我在互联网上发现了这一点,但它只是抛出一个Nullpointerexception:

Button MyButton = new Button(this); LinearLayout.LayoutParams lllp=(LinearLayout.LayoutParams)MyButton.getLayoutParams(); lllp.gravity=Gravity.RIGHT; MyButton.setLayoutParams(lllp); MyLinearLayout.addView(MyButton); 

任何解决scheme

 LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.FILL_PARENT); params.weight = 1.0f; params.gravity = Gravity.TOP; button.setLayoutParams(params); 

对于重力值以及如何设置重力检查重力

基本上,你应该根据父母selectLayoutParams。 它可以是RelativeLayout,LinearLayout等…

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

这里有很长一段时间,如果你只是对答案感兴趣,请一直向下滚动到代码:

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

文章GIST:重力影响高度/宽度分配后的视图。 所以重心不会影响FILL_PARENT的视图(将其视为自动保证)。 layout_gravity中心将影响FILL_PARENT的视图(将其视为自动填充)。

基本上,android:layout_gravity不能以编程方式访问,只有android:gravity。 在OP的情况和我的情况下,接受的答案不会将button垂直居中。

为了改进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显示“没有相关的方法”的含义不能以编程方式访问。 而引力是课堂上的一个领域。

 MyButton.setGravity(Gravity.RIGHT); 

对于layout_gravity使用“karthi”所述的答案。 这种方法设置重力,把孩子放在视图内。

我有一个类似的问题,通过编程在GridLayout中的button上设置layout_gravity。

诀窍是设置重力buttonlayoutParams button被添加到父(GridLayout), 否则重力将被忽略

 grid.addView(button) ((GridLayout.LayoutParams)button.getLayoutParams()).setGravity(int) 

这个问题是旧的,但我只是有同样的问题,并像这样解决

 LayoutParams lay = new LayoutParams(LayoutParams.FILL_PARENT,LayoutParams.FILL_PARENT) lay.gravity = Gravity.CENTER; 
 layoutParams2.gravity = Gravity.RIGHT|Gravity.BOTTOM; 

使用这个来添加一个重力

我用这样的东西:(Xamarin和C#代码)

  LinearLayout linLayout= new LinearLayout(this); linLayout.SetGravity(GravityFlags.Center); TextView txtView= new TextView(this); linLayout.AddView(txtView); 

SetGravity将我的textView放在布局的中心。 所以SetGravity布局属性是指布局内容

如果您想更改现有视图的layou_gravity ,请执行以下操作:

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

请记住根据您的视图所在的布局types使用正确的LayoutParams 。例如:

 LinearLayout.LayoutParams 

如果您需要为视图设置重力,请使用以下内容

 Button b=new Button(Context); b.setGravity(Gravity.CENTER); 

用于为button使用layoutparams的重力场的layout_gravity

 LayoutParams lp=new LayoutParams(LayoutParams.WRAP_CONTENT,LayoutParams.WRAP_CONTENT); lp.gravity=Gravity.CENTER; 

试试这个希望,这清除谢谢

其余的答案是正确的,我想补充说明。 layout_gravity是关于如何在父视图中定位视图。

调用方法parentView.addView()**后,必须设置gravity **。 我们可以看到代码:

 public void setLayoutParams(ViewGroup.LayoutParams params) { if (params == null) { throw new NullPointerException("Layout parameters cannot be null"); } mLayoutParams = params; resolveLayoutParams(); if (mParent instanceof ViewGroup) { ((ViewGroup) mParent).onSetLayoutParams(this, params); } requestLayout(); } 

而空指针的问题是因为它不在getLayoutParams()之前调用addView。

注释已经说过:“如果这个View没有附加到父ViewGroup或者{@link#setLayoutParams(android.view.ViewGroup.LayoutParams)},那么这个方法可能会返回null。当一个View被附加到父级ViewGroup,这个方法不能返回null。“

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

 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把第一个视图元素放在父元素的中心。 所以,我们系统不考虑初始宽度和高度来排列视图在中心。 我做的代码部分。

到RelativeLayout,试试这个代码,它适用于我: yourLayoutParams.addRule(RelativeLayout.ALIGN_PARENT_RIGHT);

完美的工作! 以上答案都不适用于我。 在Xml文件中设置重力和设置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); 

另外检查这个,你可以find有关重力和layout_gravity的清晰解释。

我从LinearLayout.LayoutParams切换到RelativeLayout.LayoutParams,最终得到了我所创build的自定义circleview所需的结果。

但是使用addRule而不是重力

RelativeLayout.LayoutParams mCircleParams = new RelativeLayout.LayoutParams(circleheight,circleheight);

  mCircleParams.addRule(RelativeLayout.CENTER_IN_PARENT); 

试试这个代码

  Button btn = new Button(YourActivity.this); btn.setGravity(Gravity.CENTER | Gravity.TOP); btn.setText("some text"); 

要么

  btn.setGravity(Gravity.TOP);