Android以编程方式设置在xml文件中声明的按钮边距? [复制]
Posted
技术标签:
【中文标题】Android以编程方式设置在xml文件中声明的按钮边距? [复制]【英文标题】:Android set margin of buttons declared in xml file programmatically? [duplicate] 【发布时间】:2012-05-24 21:11:46 【问题描述】:可能重复:Set margins in a LinearLayout programmatically
我的布局中有一堆小部件。我在布局文件中设置了 layout_marginTop 但我想在活动中调用这两个按钮并设置 layout_marginLeft 并以编程方式更改值。我尝试使用 getLayoutParams() 但无法设置边距。 是否可以以编程方式更改在 xml 文件中声明的小部件的边距(在活动中调用布局之后)?
//oncreate方法
setContentView(R.layout.gamelayout);
//xml布局
<ImageView
android:id="@+id/gameImage"
android:layout_
android:layout_
>
</ImageView>
<Button
android:id="@+id/lButton"
android:layout_
android:layout_
android:layout_marginTop="10dip"
android:layout_gravity="center_vertical|center_horizontal" />
<Button
android:id="@+id/rButton"
android:layout_
android:layout_
android:layout_marginTop="10dip"
android:layout_gravity="center_vertical|center_horizontal" />
<ImageView
android:id="@+id/levelImage"
android:layout_
android:layout_
android:layout_gravity="bottom|left"
android:src="@drawable/ic_launcher" />
<Button
android:id="@+id/homeButton"
android:layout_
android:layout_
android:layout_gravity="bottom|right"
android:background="@drawable/home_btn" />
</FrameLayout>
请帮帮我
谢谢
【问题讨论】:
试试this 【参考方案1】:Android 中的每个布局都有它自己的通用 ViewGroup.LayoutParams
子类,您应该使用它来设置其中的小部件的布局参数。在您的情况下,它是FrameLayout.LayoutParams
。
正如其他人所说:
FrameLayout layout = (FrameLayout) findViewById(R.layout.frame_layout);
FrameLayout.LayoutParams params = new FrameLayout.LayoutParams(
FrameLayout.LayoutParams.FILL_PARENT,
FrameLayout.LayoutParams.WRAP_CONTENT);
params.setMargins(30, 10, 0, 0);
Button btn = (Button) findViewById(R.id.rbutton);
btn.setLayoutParams(params);
btn.requestLayout();
另请参阅setMargins
的文档:
需要调用 requestLayout() 以便考虑新的边距。
【讨论】:
谢谢!我认为我们应该使用 params.setMargins 而不是 layoutParams.setMargins?我说的对吗? params.setMargins 在不设置 gavity 的情况下不起作用?我不明白为什么。无论如何你的代码给了我提示非常感谢! :)【参考方案2】:LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(
LinearLayout.LayoutParams.FILL_PARENT, LinearLayout.LayoutParams.WRAP_CONTENT);
params.setMargins(10, 20, 30, 40);
Button button = new Button(this);
button.setText("some text");
layout.addView(button, params);
【讨论】:
【参考方案3】:这段代码sn-p可以帮助你
LinearLayout ll = new LinearLayout(this);
ll.setOrientation(LinearLayout.VERTICAL);
LinearLayout.LayoutParams layoutParams = new LinearLayout.LayoutParams(
LinearLayout.LayoutParams.FILL_PARENT, LinearLayout.LayoutParams.WRAP_CONTENT);
layoutParams.setMargins(30, 20, 30, 0);
Button okButton=new Button(this);
okButton.setText("some text");
ll.addView(okButton, layoutParams);
你必须在 LinearLayout.LayoutParams 对象上调用 setMargins()。
您只需将其调整为您的 FrameLayout
【讨论】:
谢谢。但这对我不起作用。我想从 xml 文件中调用按钮。我已经编辑了我的问题,请看一下。 我认为这不起作用,因为您的根布局尝试将 FrameLayout 更改为 RelativeLayout【参考方案4】:试试这样的:
Button button = (Button)findViewById(R.id.widget111);
button.setText("foobar");
FrameLayout.LayoutParams blp = new FrameLayout.LayoutParams(0, 0);
blp.leftMargin = 20;
blp.rightMargin= 30;
button.setLayoutParams(blp);
【讨论】:
我无法将我的按钮设置为布局(R.layout.my_button)向我显示一个错误。您能解释一下我们为什么要使用 tablerow 吗? 我已经编辑了代码。请检查 谢谢,但它在 new FrameLayout.LayoutParams() 处显示错误(构造函数 FrameLayout.LayoutParams() 未定义)我应该设置宽度和高度属性吗? 当然!我会投票!我还在尝试解决。我可以看到其他小部件,但设置边距后按钮没有出现。 @Hassy31 你找到解决办法了吗?以上是关于Android以编程方式设置在xml文件中声明的按钮边距? [复制]的主要内容,如果未能解决你的问题,请参考以下文章
是否可以在 android 中以编程方式创建 string.xml 文件?
以编程方式测试是否在Android 10+中禁用了旧版外部存储访问