如何以编程方式设置我的按钮layout_gravity? />
Button MyButton = new Button(this);
LinearLayout.LayoutParams lllp=(LinearLayout.LayoutParams)MyButton.getLayoutParams();
lllp.gravity=Gravity.RIGHT;
MyButton.setLayoutParams(lllp);
MyLinearLayout.addView(MyButton);
任何解决方案?
#1 楼
JavaLinearLayout.LayoutParams params = new LinearLayout.LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.MATCH_PARENT);
params.weight = 1.0f;
params.gravity = Gravity.TOP;
button.setLayoutParams(params);
科特林
val params = LinearLayout.LayoutParams(
LinearLayout.LayoutParams.WRAP_CONTENT,
LinearLayout.LayoutParams.WRAP_CONTENT
).apply {
weight = 1.0f
gravity = Gravity.TOP
}
有关重力值以及如何设置重力的信息,请检查重力。
基本上,应根据父级选择
LayoutParams
。可以是RelativeLayout
,LinearLayout
等... 评论
由于某些原因,params.gravity = 80(应为Docs,应该是BOTTOM)无法正常工作。在“视图”和“文本”的底部之间有一些空间。它不是底部对齐...
–亚当·瓦赫吉(Adam Varhegyi)
2011-11-10 13:09
从文档中获取常量值是完全错误的,请使用Gravity.TOP
– Maragues
2012年9月22日上午11:02
这是“重力”,他要求“ layout_gravity”?
–乌斯曼·汗(M. Usman Khan)
16 Mar 4 '16 at 14:02
@usman不,这是关于layout_gravity(即LayoutParams.gravity)。重力将为button.setGravity()
–地板
16年11月23日在17:06
在SO上,关于重力和layout_gravity的信息有很多错误。许多人认为setGravity()是layout_gravity,但这是错误的。我可以同意此答案对于以编程方式设置layout_gravity是正确的。
–好吧
16年11月28日在9:36
#2 楼
我不希望恢复旧线程,但这是一个无法正确回答的问题,而且我本人也遇到了该问题。答案请一直向下滚动至代码:android:gravity和android:layout_gravity的工作方式不同。这是我读过的对我有帮助的文章。
文章的GIST:分配高度/宽度后,重力会影响视图。因此,重心将不会影响完成FILL_PARENT的视图(将其视为自动边距)。 layout_gravity中心将影响为FILL_PARENT的视图(将其视为自动填充)。情况下,可接受的答案不会使按钮垂直居中。
要改善Karthi的答案,请按以下步骤操作:
/>
android:layout_gravity显示“没有相关方法”的含义不能以编程方式访问。
重力是类中的一个字段。
评论
还要添加基于LinearLayout父级方向的重力自动边距(由于缺少更好的用语)。提供的文章链接会有所帮助。
–骑士
2012年11月12日上午10:25
#3 楼
MyButton.setGravity(Gravity.RIGHT);
对于layout_gravity,请使用“ karthi”所述的答案。此方法设置重力以将子代放置在视图内。
评论
它只是重力,而不是layout_gravity。
–亚当·瓦赫吉(Adam Varhegyi)
2011年11月8日,11:27
好吧,然后告诉我,如果layout_gravity等于setGravity,那么如何设置重力?
–亚当·瓦赫吉(Adam Varhegyi)
2011年11月8日,11:30
developer.android.com/reference/android/widget/…,看看这个。
– Yaswanth Kumar
2011年11月8日,11:31
对不起,发布巨大的文档不是解决方案,
–亚当·瓦赫吉(Adam Varhegyi)
2011年11月8日,11:59
在链接中查找setGravity方法。某种程度上,重定向到确切方法的方法不起作用。
– Yaswanth Kumar
2011年11月8日12:03
#4 楼
我通过编程在GridLayout中的按钮上设置layout_gravity时遇到了类似的问题。诀窍是在按钮布局上设置重力,然后将按钮添加到父级(GridLayout),否则会忽略重力。
评论
如何更改整个GridLayout的layout_gravity?
–伊克巴尔
16年2月8日在12:48
2020年仍然如此!为什么?
–托马斯
20-10-31在20:55
#5 楼
如果要更改现有视图的layou_gravity
,请执行以下操作:((FrameLayout.LayoutParams) view.getLayoutParams()).gravity = Gravity.BOTTOM;
请记住根据视图所在的布局类型使用正确的
LayoutParams
例如:LinearLayout.LayoutParams
#6 楼
layoutParams2.gravity = Gravity.RIGHT|Gravity.BOTTOM;
使用它添加多个重力
评论
不,这是这样的:引力= Gravity.END或Gravity.BOTTOM
–夹竹桃
20-10-8在15:39
#7 楼
这个问题很旧,但我也遇到了同样的问题,并像这样解决了LayoutParams lay = new LayoutParams(LayoutParams.FILL_PARENT,LayoutParams.FILL_PARENT)
lay.gravity = Gravity.CENTER;
评论
@Muzikant ..好的..我没有首先注意到..但是现在对我来说很清楚..谢谢
–诺曼
2012年7月18日在9:51
这仅通过指定首先使用哪种布局才能起作用吗?像RelativeLayout.LayoutParams ...而不是LayoutParams
–shecodesthings
2012年10月31日18:48
RelativeLayout.LayoutParams使用其他标志来设置视图的重力(rightOf,centerInParent,centerVertical)。此解决方法适用于LinearLayouts儿童
– Noni
2013年9月24日20:41在
#8 楼
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()
评论
节省我的时间... THX
– BertKing
19年3月1日在7:08
#9 楼
我使用这样的东西:(Xamarin和C#代码) LinearLayout linLayout= new LinearLayout(this);
linLayout.SetGravity(GravityFlags.Center);
TextView txtView= new TextView(this);
linLayout.AddView(txtView);
SetGravity将我的textView放在布局的中心。
所以SetGravity布局属性引用布局内容
#10 楼
如果需要为视图设置重力,请使用以下Button b=new Button(Context);
b.setGravity(Gravity.CENTER);
为Button设置layout_gravity
,将layoutparams的重力字段用作>
LayoutParams lp=new LayoutParams(LayoutParams.WRAP_CONTENT,LayoutParams.WRAP_CONTENT);
lp.gravity=Gravity.CENTER;
试试这个
希望清除它
感谢
#11 楼
其余的答案是正确的,我想添加更多的解释。 layout_gravity关于如何在父视图中放置视图。调用方法parentView.addView()**之后,必须设置重力。我们可以看到代码:
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。
注释已经说过:“如果此视图未附加到父ViewGroup或未成功调用{@ link#setLayoutParams(android.view.ViewGroup.LayoutParams)},则此方法可能返回null。当View附加到父ViewGroup时,此方法不得返回null。“
评论
这也让我有点...在调用addView()之后不必设置重力。您可能会认为要在新视图上设置所有内容,然后添加它,所以这是不直观的:-P
– Kenyee
16年8月14日在3:23
#12 楼
如果要将视图放置在父视图的中心,则可以使用以下代码。因此,我们系统不考虑初始宽度和高度来将视图安排在中心。
我很好地完成了代码部分。
评论
我-斜体))))
– Artem
17年4月12日在13:24
#13 楼
到RelativeLayout,请尝试以下代码,该代码对我有用:yourLayoutParams.addRule(RelativeLayout.ALIGN_PARENT_RIGHT);
#14 楼
完美地工作!!!以上答案均不适合我。在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);
还要检查此内容,在这里您可以找到有关引力和layout_gravity的清晰说明。
#15 楼
上面的大多数答案都是正确的,所以写了一个辅助方法,这样您就可以直接在项目中使用它了。// 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;
}
#16 楼
我从LinearLayout.LayoutParams切换到RelativeLayout.LayoutParams终于在我创建的自定义圆环视图上获得了我想要的结果。 LayoutParams mCircleParams =新的RelativeLayout.LayoutParams(circleheight,circleheight); mCircleParams.addRule(RelativeLayout.CENTER_IN_PARENT);
#17 楼
试试此代码 Button btn = new Button(YourActivity.this);
btn.setGravity(Gravity.CENTER | Gravity.TOP);
btn.setText("some text");
或
btn.setGravity(Gravity.TOP);
评论
OP要求的不是layout_gravity重力。
– alizeyn
18年7月1日在12:04
#18 楼
int width=getResources().getDisplayMetrics().widthPixels;
LinearLayout.LayoutParams params = new LinearLayout.LayoutParams
(width, width);
params.gravity = Gravity.CENTER;
iv_main_text = new HTextView(getContext());
iv_main_text.setLayoutParams(params);
iv_main_text.setBackgroundColor(Color.BLUE);
iv_main_text.setTextSize(60);
iv_main_text.setGravity(Gravity.CENTER);
iv_main_text.setTextColor(Color.BLACK);
#19 楼
FloatingActionButton sendFab = new FloatingActionButton(this);
FrameLayout.LayoutParams layoutParams = new FrameLayout.LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.WRAP_CONTENT);
layoutParams.setMargins(32, 32, 32, 32);
layoutParams.gravity = Gravity.END|Gravity.BOTTOM;
sendFab.setLayoutParams(layoutParams);
sendFab.setImageResource(android.R.drawable.ic_menu_send);
评论
我相信您需要先将视图添加到其父视图,然后该视图的LayoutParams才会为null。