当前位置: 首页 > 工具软件 > Gravity > 使用案例 >

android gravity参数,android - 如何以编程方式设置layout_gravity?

简景焕
2023-12-01

android - 如何以编程方式设置layout_gravity?

我的问题很简单,

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

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

Button MyButton = new Button(this);

LinearLayout.LayoutParams lllp=(LinearLayout.LayoutParams)MyButton.getLayoutParams();

lllp.gravity=Gravity.RIGHT;

MyButton.setLayoutParams(lllp);

MyLinearLayout.addView(MyButton);

有解决方案吗

16个解决方案

468 votes

LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.FILL_PARENT);

params.weight = 1.0f;

params.gravity = Gravity.TOP;

button.setLayoutParams(params);

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

基本上,您应该根据父级选择LayoutParams。 它可以是RelativeLayout,LinearLayout等......

Karthi answered 2019-02-15T05:20:53Z

50 votes

我不想复活旧线程,但这是一个无法正确回答的问题,而且我自己遇到了这个问题。

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

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

文章的GIST:重力影响高度/宽度分配后的视图。 因此,重心不会影响完成FILL_PARENT的视图(将其视为自动边距)。 layout_gravity center将影响FILL_PARENT视图(将其视为自动填充)。

基本上,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显示“无相关方法”意思无法以编程方式访问。而重力是班上的一个领域。

Uknight answered 2019-02-15T05:22:12Z

22 votes

MyButton.setGravity(Gravity.RIGHT);

对于layout_gravity,请使用“karthi”所述的答案。 此方法设置重力以将子项放在视图中。

Yashwanth Kumar answered 2019-02-15T05:22:38Z

16 votes

我在GridLayout中按钮上以编程方式设置layout_gravity时遇到了类似的问题。

诀窍是在按钮被添加到父(GridLayout)之后在按钮layoutParams上设置重力,否则将忽略重力。

grid.addView(button)

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

owjsub answered 2019-02-15T05:23:12Z

8 votes

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

LayoutParams lay = new LayoutParams(LayoutParams.FILL_PARENT,LayoutParams.FILL_PARENT)

lay.gravity = Gravity.CENTER;

CodeFlakes answered 2019-02-15T05:23:39Z

8 votes

layoutParams2.gravity = Gravity.RIGHT|Gravity.BOTTOM;

用它来增加一个以上的引力

Omar Alnajjar answered 2019-02-15T05:24:09Z

6 votes

如果要更改现有视图的LayoutParams,请执行以下操作:

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

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

LinearLayout.LayoutParams

vovahost answered 2019-02-15T05:24:43Z

4 votes

我使用类似的东西:(Xamarin和C#代码)

LinearLayout linLayout= new LinearLayout(this);

linLayout.SetGravity(GravityFlags.Center);

TextView txtView= new TextView(this);

linLayout.AddView(txtView);

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

alin0509 answered 2019-02-15T05:25:18Z

3 votes

如果您需要为View设置Gravity,请使用以下内容

Button b=new Button(Context);

b.setGravity(Gravity.CENTER);

用于设置Button的layout_gravity使用重力场作为布局参数

LayoutParams lp=new LayoutParams(LayoutParams.WRAP_CONTENT,LayoutParams.WRAP_CONTENT);

lp.gravity=Gravity.CENTER;

试试这个希望这清楚谢谢

user2779311 answered 2019-02-15T05:25:59Z

3 votes

其余答案是对的,我想补充更多解释。 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。

注释已经说过“如果此View未附加到父ViewGroup,或者@@ link#setLayoutParams(android.view.ViewGroup.LayoutParams)}未成功调用,则此方法可能返回null。当视图附加到父项时 ViewGroup,此方法不能返回null。“

Snow Albert answered 2019-02-15T05:26:45Z

2 votes

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

michael wang answered 2019-02-15T05:27:11Z

2 votes

完美的工作! 上述答案都不适合我。 在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);

同时选中This,您可以在其中找到有关gravity和layout_gravity的清晰说明。

Tara answered 2019-02-15T05:27:48Z

2 votes

如果要将视图放在父级的中心,可以使用以下代码。

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将第一个视图元素放在父级的中心。因此,我们系统不考虑初始宽度和高度来排列中心的视图。我很好地完成了代码部分。

Cheng answered 2019-02-15T05:28:23Z

0 votes

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

但是使用addRule而不是引力

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

mCircleParams.addRule(RelativeLayout.CENTER_IN_PARENT);

user3886197 answered 2019-02-15T05:29:04Z

0 votes

试试这个代码

Button btn = new Button(YourActivity.this);

btn.setGravity(Gravity.CENTER | Gravity.TOP);

btn.setText("some text");

要么

btn.setGravity(Gravity.TOP);

Faxriddin Abdullayev answered 2019-02-15T05:29:26Z

0 votes

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);

Manthan Patel answered 2019-02-15T05:29:45Z

 类似资料: