我的布局中有一堆小部件。我在布局文件中设置了layout_marginTop,但我想在活动中调用这两个按钮并设置layout_marginLeft并以编程方式更改值。我尝试使用getLayoutParams()但无法设置边距。 是否有可能以编程方式更改在xml文件中声明的小部件的边距(在活动中调用布局后)?
// oncreate方法
setContentView(R.layout.gamelayout);
// xml布局
<ImageView
android:id="@+id/gameImage"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
>
</ImageView>
<Button
android:id="@+id/lButton"
android:layout_width="wrap_content"
android:layout_height="140dip"
android:layout_marginTop="10dip"
android:layout_gravity="center_vertical|center_horizontal" />
<Button
android:id="@+id/rButton"
android:layout_width="wrap_content"
android:layout_height="140dip"
android:layout_marginTop="10dip"
android:layout_gravity="center_vertical|center_horizontal" />
<ImageView
android:id="@+id/levelImage"
android:layout_width="60dip"
android:layout_height="60dip"
android:layout_gravity="bottom|left"
android:src="@drawable/ic_launcher" />
<Button
android:id="@+id/homeButton"
android:layout_width="60dip"
android:layout_height="60dip"
android:layout_gravity="bottom|right"
android:background="@drawable/home_btn" />
</FrameLayout>
请帮帮我
谢谢
答案 0 :(得分:6)
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()的调用,以便考虑新的边距。
答案 1 :(得分:2)
尝试这样的事情:
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);
答案 2 :(得分: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 :(得分:2)
此代码段可以帮助您
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
即可