0

我以编程方式创建了带有五个固定大小按钮的线性布局,但是当我改变方向时,按钮在横向拉伸

这是我的代码:

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

已弃用,您应该尝试此代码:前两行代码为您提供 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 回答