如何创建具有相等宽度的按钮?

Tha*_*hem 27 user-interface android button android-layout

我想在屏幕中间显示三个按钮,并且三个按钮的宽度都相同,但它们将具有不同长度的文本标签.

只需添加三个不同长度的文本标签按钮,即可生成不同宽度的按钮.

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="horizontal"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:layout_gravity="center_vertical"
    android:gravity="center">
    <Button
        android:id="@+id/button_1"
        android:layout_height="fill_parent"
        android:layout_width="wrap_content"
        android:text="ABCDEF" />
    <Button
        android:id="@+id/button_2"
        android:layout_height="fill_parent"
        android:layout_width="wrap_content"
        android:text="GHI" />
    <Button
        android:id="@+id/button_3"
        android:layout_height="fill_parent"
        android:layout_width="wrap_content"
        android:text="JKLM" />
</LinearLayout>
Run Code Online (Sandbox Code Playgroud)

默认按钮宽度包装内容:
默认按钮宽度包装内容

-

在所有按钮上将layout_weight设置为1并将layout_width设置为0dip会使它们均匀拉伸以填充整个屏幕宽度.对于我想要的东西,这样的按钮太大了,特别是在大屏幕上.

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="horizontal"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:layout_gravity="center_vertical"
    android:gravity="center">
    <Button
        android:id="@+id/button_1"
        android:layout_height="fill_parent"
        android:layout_width="0dip"
        android:layout_weight="1"
        android:text="ABCDEF" />
    <Button
        android:id="@+id/button_2"
        android:layout_height="fill_parent"
        android:layout_width="0dip"
        android:layout_weight="1"
        android:text="GHI" />
    <Button
        android:id="@+id/button_3"
        android:layout_height="fill_parent"
        android:layout_width="0dip"
        android:layout_weight="1"
        android:text="JKLM" />
</LinearLayout>
Run Code Online (Sandbox Code Playgroud)

布局重量1按钮填充屏幕宽度:
布局重量1按钮填充屏幕宽度

-

在父LinearLayout中为weightSum设置不同的值可以用来阻止按钮填满整个屏幕,但我不认为这是我想要的路径,因为我不希望按钮占据很大一部分在大屏幕设备上的屏幕.为了澄清,使用weightSum,我可以,例如,我可以设置三个按钮共同占据屏幕宽度的一半,这在小屏幕上看起来可以正常,但在大屏幕上,按钮仍然占据屏幕宽度的一半,并且按钮会比我想要的要大得多.也许最终的解决方案是为不同的屏幕设置不同的布局文件,但我宁愿不走这条路.

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="horizontal"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:layout_gravity="center_vertical"
    android:gravity="center"
    android:weightSum="5">
    <Button
        android:id="@+id/button_1"
        android:layout_height="fill_parent"
        android:layout_width="0dip"
        android:layout_weight="1"
        android:text="ABCDEF" />
    <Button
        android:id="@+id/button_2"
        android:layout_height="fill_parent"
        android:layout_width="0dip"
        android:layout_weight="1"
        android:text="GHI" />
    <Button
        android:id="@+id/button_3"
        android:layout_height="fill_parent"
        android:layout_width="0dip"
        android:layout_weight="1"
        android:text="JKLM" />
</LinearLayout>
Run Code Online (Sandbox Code Playgroud)

重量和5小屏幕:
重量和5小屏幕

重量和5大屏幕:
重量和5大屏幕

-

我也用TableLayout尝试了很多东西,但没有比使用LinearLayout更好的东西.

GridView使用起来非常笨拙,我还没有尝试过.

那么,如何创建具有相同宽度的按钮,最好只需要宽度足以使按钮的内容与最长的标签相匹配?

任何建议表示赞赏.

(我确实搜索并发现这个问题并且多次回答,但我找到的答案都没有解决我想要实现的问题.)

Com*_*are 5

也许最终的解决方案是为不同的屏幕设置不同的布局文件,但我宁愿不走这条路.

许多程序员将使用res/layout/res/layout-large/处理这样的情况.在三个按钮的有限情况下,您可能有其他选择,但通常用户界面并不那么简单.

那么,如何创建具有相同宽度的按钮,最好只需要宽度足以使按钮的内容与最长的标签相匹配?

要完成"首选"[原文如此]的要求,您需要为此创建自定义布局类.以下是与仪表板模式相关的信息,您可以将其用作起点.