简体   繁体   English

Android TableLayout使所有按钮的大小相同

[英]Android TableLayout make all buttons same size

I'm making a custom dialer and want to have all the buttons be the same size but because some of the text is longer than others (eg the "7" button has "PQRS" under it) it stretches out some columns. 我正在制作一个自定义拨号器,并希望所有按钮的大小相同,但是由于某些文本比其他文本长(例如,“ 7”按钮下带有“ PQRS”),因此它会延伸一些列。 Here is what I'm doing currently, what am I doing wrong? 这是我目前正在做的事情,我做错了什么?

<TableLayout
    android:id="@+id/tableView"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:stretchColumns="*" >
    <TableRow
        android:layout_weight="1"
        android:gravity="center" >
        <Button
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:soundEffectsEnabled="false"
            android:textSize="20sp"
            android:text="@string/dialer_one" />
        <Button
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:soundEffectsEnabled="false"
            android:textSize="20sp"
            android:text="@string/dialer_two" />
        <Button
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:soundEffectsEnabled="false"
            android:textSize="20sp"
            android:text="@string/dialer_three" />
    </TableRow>
    <TableRow
        android:layout_weight="1"
        android:gravity="center" >
        <Button
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:soundEffectsEnabled="false"
            android:textSize="20sp"
            android:text="@string/dialer_four" />
        <Button
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:soundEffectsEnabled="false"
            android:textSize="20sp"
            android:text="@string/dialer_five" />
        <Button
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:soundEffectsEnabled="false"
            android:textSize="20sp"
            android:text="@string/dialer_six" />
    </TableRow>
    <TableRow
        android:layout_weight="1"
        android:gravity="center" >
        <Button
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:soundEffectsEnabled="false"
            android:textSize="20sp"
            android:text="@string/dialer_seven" />
        <Button
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:soundEffectsEnabled="false"
            android:textSize="20sp"
            android:text="@string/dialer_eight" />
        <Button
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:soundEffectsEnabled="false"
            android:textSize="20sp"
            android:text="@string/dialer_nine" />
    </TableRow>
    <TableRow
        android:layout_weight="1"
        android:gravity="center" >
        <Button
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:soundEffectsEnabled="false"
            android:textSize="20sp"
            android:text="@string/dialer_star" />
        <Button
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:soundEffectsEnabled="false"
            android:textSize="20sp"
            android:text="@string/dialer_zero" />
        <Button
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:soundEffectsEnabled="false"
            android:textSize="20sp"
            android:text="@string/dialer_pound" />
    </TableRow>
</TableLayout>

Try this : And if you don't want to fill your whole screen then remove the weightSum of the main TableLayout and respective layout_weight in TableRows 尝试以下操作:如果您不想填满整个屏幕,则删除TableRows中主TableLayoutweightSum和相应的layout_weight

<TableLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:id="@+id/tableView"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:stretchColumns="*"
    android:weightSum="4" >

    <TableRow
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"
        android:layout_weight="1"
        android:weightSum="3" >

        <Button
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_weight="1"
            android:soundEffectsEnabled="false"
            android:text="dialer_one"
            android:textSize="20sp" />

        <Button
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_weight="1"
            android:soundEffectsEnabled="false"
            android:text="dialer_two"
            android:textSize="20sp" />

        <Button
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_weight="1"
            android:soundEffectsEnabled="false"
            android:text="dialer_three"
            android:textSize="20sp" />
    </TableRow>

    <TableRow
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"
        android:layout_weight="1"
        android:weightSum="3" >

        <Button
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_weight="1"
            android:soundEffectsEnabled="false"
            android:gravity="center"
            android:text="dialer_four"
            android:textSize="20sp" />

        <Button
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_weight="1"
            android:soundEffectsEnabled="false"
            android:gravity="center"
            android:text="dialer_five"
            android:textSize="20sp" />

        <Button
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_weight="1"
            android:soundEffectsEnabled="false"
            android:gravity="center"
            android:text="dialer_six"
            android:textSize="20sp" />
    </TableRow>

    <TableRow
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"
        android:layout_weight="1"
        android:weightSum="3" >

        <Button
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_weight="1"
            android:soundEffectsEnabled="false"
             android:gravity="center_vertical"
            android:text="dialer_seven"
            android:textSize="20sp" />

        <Button
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_weight="1"
            android:soundEffectsEnabled="false"
             android:gravity="center_vertical"
            android:text="dialer_eight"
            android:textSize="20sp" />

        <Button
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_weight="1"
            android:soundEffectsEnabled="false"
             android:gravity="center_vertical"
            android:text="dialer_nine"
            android:textSize="20sp" />
    </TableRow>

    <TableRow
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"
        android:layout_weight="1"
        android:weightSum="3" >

        <Button
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_weight="1"
            android:soundEffectsEnabled="false"
            android:layout_gravity="center_vertical"
            android:text="dialer_star"
            android:textSize="20sp" />

        <Button
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_weight="1"
            android:soundEffectsEnabled="false"
             android:layout_gravity="center_vertical"
            android:text="dialer_zero"
            android:textSize="20sp" />

        <Button
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_weight="1"
            android:soundEffectsEnabled="false"
             android:layout_gravity="center_vertical"
            android:text="dialer_pound"
            android:textSize="20sp" />
    </TableRow>

</TableLayout>

This should work 这应该工作

use linear layout instead of table layout and set weight=1 for all buttons. 使用线性布局而不是表格布局,并为所有按钮设置weight = 1。 it will give you positive result what you want.. 它会给您想要的积极结果。

<TableLayout
android:id="@+id/tableView"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:stretchColumns="*"

 xmlns:android="http://schemas.android.com/apk/res/android">
<TableRow
   android:layout_width="fill_parent"
   android:layout_height="wrap_content"
    >
    <Button
        android:layout_weight="1"
        android:layout_width="0dp"
        android:layout_height="match_parent"
        android:soundEffectsEnabled="false"
        android:textSize="20sp"
        android:text="dialer_one" />
    <Button
         android:layout_weight="1"
        android:layout_width="0dp"
        android:layout_height="match_parent"
        android:soundEffectsEnabled="false"
        android:textSize="20sp"
        android:text="dialer_two" />
    <Button
         android:layout_weight="1"
        android:layout_width="0dp"
        android:layout_height="match_parent"
        android:soundEffectsEnabled="false"
        android:textSize="20sp"
        android:text="dialer_three" />
</TableRow>
<TableRow
    android:layout_width="fill_parent"
   android:layout_height="wrap_content">
    <Button
         android:layout_weight="1"
        android:layout_width="0dp"
        android:layout_height="match_parent"
        android:soundEffectsEnabled="false"
        android:textSize="20sp"
        android:text="dialer_four" />
    <Button
         android:layout_weight="1"
        android:layout_width="0dp"
        android:layout_height="match_parent"
        android:soundEffectsEnabled="false"
        android:textSize="20sp"
        android:text="dialer_five" />
    <Button
         android:layout_weight="1"
        android:layout_width="0dp"
        android:layout_height="match_parent"
        android:soundEffectsEnabled="false"
        android:textSize="20sp"
        android:text="dialer_six" />
</TableRow>
<TableRow
    android:layout_width="fill_parent"
   android:layout_height="wrap_content">
    <Button
         android:layout_weight="1"
        android:layout_width="0dp"
        android:layout_height="match_parent"
        android:soundEffectsEnabled="false"
        android:textSize="20sp"
        android:text="dialer_seven" />
    <Button
         android:layout_weight="1"
        android:layout_width="0dp"
        android:layout_height="match_parent"
        android:soundEffectsEnabled="false"
        android:textSize="20sp"
        android:text="dialer_eight" />
    <Button
         android:layout_weight="1"
        android:layout_width="0dp"
        android:layout_height="match_parent"
        android:soundEffectsEnabled="false"
        android:textSize="20sp"
        android:text="dialer_nine" />
</TableRow>
<TableRow
    android:layout_width="fill_parent"
   android:layout_height="wrap_content" >
    <Button
         android:layout_weight="1"
        android:layout_width="0dp"
        android:layout_height="match_parent"
        android:soundEffectsEnabled="false"
        android:textSize="20sp"
        android:text="dialer_star" />
    <Button
         android:layout_weight="1"
        android:layout_width="0dp"
        android:layout_height="match_parent"
        android:soundEffectsEnabled="false"
        android:textSize="20sp"
        android:text="dialer_zero" />
    <Button
         android:layout_weight="1"
        android:layout_width="0dp"
        android:layout_height="match_parent"
        android:soundEffectsEnabled="false"
        android:textSize="20sp"
        android:text="dialer_pound" />
</TableRow>

I think this is what you want.. 我想这就是你想要的。

Use WeightSum and Weight in order to have all buttons of equal width like this, 使用WeightSum和Weight可以使所有具有相同宽度的按钮像这样,

 <TableRow
            android:layout_weight="1"
            android:gravity="center"
            android:weightSum="3" >

            <Button
                android:layout_weight="1"
                android:layout_width="match_parent"
                android:layout_height="match_parent"
                android:soundEffectsEnabled="false"
                android:text="@string/dialer_one"
                android:textSize="20sp" />

            <Button
                android:layout_weight="1"
                android:layout_width="match_parent"
                android:layout_height="match_parent"
                android:soundEffectsEnabled="false"
                android:text="@string/dialer_two"
                android:textSize="20sp" />

            <Button
                android:layout_weight="1"
                android:layout_width="match_parent"
                android:layout_height="match_parent"
                android:soundEffectsEnabled="false"
                android:text="@string/dialer_three"
                android:textSize="20sp" />
        </TableRow>

事实证明,按钮的大小都不同,因为按钮文本周围的默认填充过高。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM