2

重複の可能性:
プログラムで LinearLayout にマージンを設定する

レイアウトにたくさんのウィジェットがあります。レイアウト ファイルに layout_marginTop を設定しましたが、アクティビティでこれら 2 つのボタンを呼び出して、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>

私を助けてください

ありがとうございました

4

4 に答える 4

6

ViewGroup.LayoutParamsAndroid の各レイアウトには、内部のウィジェットのレイアウト パラメータを設定するために使用する必要がある、独自の一般的なサブクラスがあります。あなたの場合はです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() を呼び出す必要があります。

于 2012-05-17T10:26:03.457 に答える
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); 
于 2012-05-17T09:51:24.363 に答える
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);
于 2012-05-17T09:51:57.667 に答える
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に適応させるだけです

于 2012-05-17T09:52:02.903 に答える