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