0

固定サイズの 5 つのボタンを含む線形レイアウトをプログラムで作成していますが、方向を変更すると、ボタンが横長に伸びます

ここに私のコードがあります:

LinearLayout button_layout = new LinearLayout(this);
    button_layout.setLayoutParams(new LinearLayout.LayoutParams(LayoutParams.FILL_PARENT, 100));
    button_layout.setOrientation(LinearLayout.HORIZONTAL);
    button_layout.setBackgroundColor(Color.parseColor("#DCE1DC"));

FrameLayout layout = new FrameLayout(this);
    layout.setLayoutParams(new LinearLayout.LayoutParams(20, 80, 1));
    LayoutParams params = (LayoutParams) layout.getLayoutParams();
    params.setMargins(30, 0, 30, 0);

    Button A = new Button(this);
    A.setLayoutParams(params);
    A.setText("A");
    button_layout.addView(A);
    Button B = new Button(this);
    B.setLayoutParams(params);
    B.setText("B");
    button_layout.addView(B);
    Button C = new Button(this);
    C.setLayoutParams(params);
    C.setText("C");
    button_layout.addView(C);
    Button D = new Button(this);
    D.setLayoutParams(params);
    D.setText("D");
    button_layout.addView(D);
    Button E = new Button(this);
    E.setLayoutParams(params);
    E.setText("E");
    button_layout.addView(E);
    linearLayout.addView(button_layout); //added button layout. 

    LinearLayout bottomBarLayout = new LinearLayout(this);
    bottomBarLayout.setLayoutParams(new LinearLayout.LayoutParams(LayoutParams.FILL_PARENT, 50));
    bottomBarLayout.setOrientation(LinearLayout.HORIZONTAL);
    bottomBarLayout.setBackgroundColor(Color.parseColor("#8BC66D"));
    linearLayout.addView(bottomBarLayout); //added bottomBar layout .

以下は私のスクリーンショットです:

ボタンを両方の方向で等間隔で正方形にしたいのですが、これを実現するにはどうすればよいですか?

4

3 に答える 3

1

私があなたを正しく理解していれば、これはあなたが達成しようとしていることです:

風景

つまり、背景を設定でき、ボタン自体が引き伸ばされないように、ボタンとラッピング レイアウトの間にある程度のスペースが必要です。また、縦向きと横向きで同じサイズのボタンが 5 つ必要です。

私はあなたのコードを取り、ほとんど変更を加えませんでした:(ここでは、よりクリーンなコードのためだけにメソッドを使用します)

public void onCreate(Bundle savedInstanceState)
{
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);

    LinearLayout linearLayout = (LinearLayout) findViewById(R.id.layout_root);

    LinearLayout button_layout = new LinearLayout(this);
    button_layout.setLayoutParams(new LinearLayout.LayoutParams(LayoutParams.FILL_PARENT, 100));
    button_layout.setOrientation(LinearLayout.HORIZONTAL);
    button_layout.setBackgroundColor(Color.parseColor("#DCE1DC"));

    button_layout.addView(createButton("A"));
    button_layout.addView(createButton("B"));
    button_layout.addView(createButton("C"));
    button_layout.addView(createButton("D"));
    button_layout.addView(createButton("E"));

    linearLayout.addView(button_layout);
}

/**
 * Create one button view
 * 
 * @param text
 * @return
 */
private LinearLayout createButton(String text)
{
    // wrapping button layout. The layout takes 20% from the parent layout
    LinearLayout oneButtonLayout = new LinearLayout(this);
    LayoutParams params = new LinearLayout.LayoutParams(LayoutParams.FILL_PARENT, LayoutParams.WRAP_CONTENT, 0.2f);
    oneButtonLayout.setLayoutParams(params);
    params.setMargins(10, 0, 10, 0);
    oneButtonLayout.setGravity(Gravity.CENTER);

    // the button itself
    Button button = new Button(this);
    button.setLayoutParams(new LinearLayout.LayoutParams(80, 80));
    button.setText(text);
    oneButtonLayout.addView(button);

    return oneButtonLayout;
}

上の画像は、横向きビューでどのように見えるかを示しており、これは縦向きビューでどのように見えるかを示しています。

肖像画

問題が解決することを願っています。

于 2013-04-04T11:23:03.350 に答える
0

ボタンが引き伸ばされる理由は次のとおりです。

button_layout.setLayoutParams(new LinearLayout.LayoutParams(LayoutParams.FILL_PARENT, 100));

ボタンのレイアウト幅を に設定していますLayoutParams.FILL_PARENT。したがって、横向きにすると、このレイアウトが大きくなり、ボタンを調整する必要があります。

ここで固定サイズを設定し、このレイアウトを中央に配置して、ボタンが常に画面の中央に表示されるようにします。これにより、ストレッチの問題が解消されます。

于 2013-04-04T07:28:00.200 に答える
0

1.以下のように表示サイズを取得します。

Display display = getWindowManager().getDefaultDisplay(); 
int width = display.getWidth();
int height = display.getHeight();

は非推奨です。代わりにこのコードを試してください。コードの最初の 2 行で DisplayMetrics オブジェクトが得られます。このオブジェクトには、heightPixels、widthPixels などのフィールドが含まれています。

DisplayMetrics metrics = new DisplayMetrics();
getWindowManager().getDefaultDisplay().getMetrics(metrics);

metrics.heightPixels;
metrics.widthPixels;

2.次に、これらのパラメーターを使用してボタンのサイズを次の ように設定します

A.setWidth(width/4);
A.setheight(height/4);

すぐ

B.setWidth(width/4);
B.setheight(height/4);

上記の比率1/4は単なる例であり、正確に必要な量または要件に最適な量を使用してください

于 2013-04-04T08:47:20.103 に答える