两个相同宽度的按钮,一行中有几个单词

时间:2018-02-09 14:45:40

标签: android button

我想在一行中绘制两个Button s 等宽。比如,他们有标题:“示例文本”和“额外文本”。它们应尽可能占用较低的空间,但所有的单词都应该写出来。

现在看起来如此:enter image description here

我写了这段代码:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:orientation="horizontal">

    <Button
        android:layout_width="0dp"
        android:layout_height="match_parent"
        android:layout_weight="1"
        android:maxLines="1"
        android:text="Sample text"
        android:textAllCaps="false" />

    <Button
        android:layout_width="0dp"
        android:layout_height="match_parent"
        android:layout_weight="1"
        android:maxLines="1"
        android:text="Extra text"
        android:textAllCaps="false" />

</LinearLayout>

如果我删除android:maxLines="1"并将wrap_content设置为宽度,则Button会写入文字,但请填写不同的宽度。

3 个答案:

答案 0 :(得分:0)

如果您想在一行找到两个按钮,则需要将match_parent设置为layout_width的{​​{1}}

LinearLayout

答案 1 :(得分:0)

为两个按钮添加布局权重。因此,它将确保您具有相同的尺寸。

android:layout_weight="1"

同时获取屏幕尺寸并以编程方式设置尺寸。

Get Screen width and height

修复特定按钮尺寸会影响小尺寸屏幕。

答案 2 :(得分:0)

您想要调整第二个按钮的大小。

如果某个按钮包含图标,请将其置于How to center icon and text in a android button with width set to "fill parent"的中心位置。例如,在CommandKey key = command.getKey(); switch(key.ordinal()) { case 1: return IncidentType.StatusChange; case 2: return IncidentType.Notification; ... 内移动Button或使用FrameLayoutLinearLayout创建ImageView

如果您的案例是自定义视图且按钮是带图标的TextView,请覆盖以下事件:

FrameLayout

如果你有一个没有图标的按钮,只有文字,调整大小会更简单:

boolean isButtonResized;

@Override
protected void onLayout(boolean changed, int l, int t, int r, int b) {
    super.onLayout(changed, l, t, r, b);

    if (!isButtonResized) {
        int buttonWidth = firstButton.getWidth();
        if (buttonWidth != 0) {
            isButtonResized = true;
            ViewGroup.LayoutParams lp = secondButton.getLayoutParams();
            lp.width = buttonWidth;
            secondButton.setLayoutParams(lp);
        }
    }
}