Android:相等的按钮大小,无椭圆或截断按钮文本

时间:2014-02-26 15:52:33

标签: android android-layout

我在对话框布局中有一组四个按钮,根据显示的数据,根据需要显示和消失。我希望底部的按钮具有相同的大小(最大按钮的大小),并始终拉伸以适应单行上按钮上的文本而不截断或椭圆化。代码和截图包括:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
        android:orientation="vertical"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:padding="10dip">
    <!-- this layout is the message count bar -->
    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:orientation="horizontal">
        <TextView
            android:visibility="gone"
            android:id="@+id/count"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:textSize="16sp"
            style="@style/CustomDialog.TextColor"/>
    </LinearLayout>

    <!-- this layout is the title bar -->
    <LinearLayout
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:orientation="horizontal">
        <ImageView
                android:id="@+id/image"
                android:layout_gravity="right"
                android:padding="5dip"
                android:layout_width="wrap_content"
                android:layout_height="match_parent"/>
        <TextView
                android:id="@+id/title"
                android:gravity="center"
                android:layout_gravity="center"
                android:layout_width="wrap_content"
                android:layout_height="match_parent"
                android:layout_weight="1"
                android:textStyle="bold"
                style="@style/CustomDialog.TextColor"/>
    </LinearLayout>

    <!-- this is the body -->
    <LinearLayout
            android:orientation="vertical"
            android:paddingTop="5dip"
            android:paddingBottom="5dip"
            android:layout_height="wrap_content"
            android:layout_width="match_parent">
        <ScrollView
                android:layout_width="match_parent"
                android:layout_height="match_parent">
            <TextView
                    android:id="@+id/body"
                    android:gravity="center"
                    android:layout_width="match_parent"
                    android:layout_height="match_parent"
                    style="@style/CustomDialog.TextColor"/>
        </ScrollView>
    </LinearLayout>

    <!-- and this is where the buttons go -->
    <TableLayout
            android:gravity="center_horizontal"
            android:layout_height="wrap_content"
            android:layout_width="match_parent"
            android:stretchColumns="1">
        <TableRow>
            <Button
                    android:id="@+id/button1"
                    android:gravity="center"
                    android:visibility="gone"
                    android:singleLine="true"
                    android:layout_width="0dp"
                    android:ellipsize="none"
                    android:layout_weight="1"
                    android:layout_height="wrap_content"/>
            <Button
                    android:id="@+id/button2"
                    android:gravity="center"
                    android:visibility="gone"
                    android:singleLine="true"
                    android:layout_width="0dp"
                    android:ellipsize="none"
                    android:layout_weight="1"
                    android:layout_height="wrap_content"/>
            <Button
                    android:id="@+id/button3"
                    android:gravity="center"
                    android:visibility="gone"
                    android:singleLine="true"
                    android:layout_width="0dp"
                    android:ellipsize="none"
                    android:layout_weight="1"
                    android:layout_height="wrap_content"/>
            <Button
                    android:id="@+id/button4"
                    android:gravity="center"
                    android:visibility="gone"
                    android:singleLine="true"
                    android:layout_width="0dp"
                    android:ellipsize="none"
                    android:layout_weight="1"
                    android:layout_height="wrap_content"/>
        </TableRow>
    </TableLayout>
</LinearLayout>

Truncating Dialog Text

此外,当正文文本太大时,按钮最终会消失,为文本腾出空间。我需要完全相反的行为(按钮始终显示在它们的整体中,并且对话框的主体被截断)。例如:

Truncating Button Height

2 个答案:

答案 0 :(得分:1)

TableLayout替换为以下内容:

  <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:orientation="horizontal" >

        <Button
            android:id="@+id/button1"
            android:layout_width="0dp"
            android:layout_height="wrap_content"
            android:layout_weight="1"
            android:ellipsize="none"
            android:visibility="gone"
            android:gravity="center"
            android:singleLine="true" />

        <Button
            android:id="@+id/button2"
            android:layout_width="0dp"
            android:layout_height="wrap_content"
            android:layout_weight="1"
            android:ellipsize="none"
            android:gravity="center"
            android:singleLine="true" />

        <Button
            android:id="@+id/button3"
            android:layout_width="0dp"
            android:layout_height="wrap_content"
            android:layout_weight="1"
            android:ellipsize="none"
            android:gravity="center"
            android:singleLine="true" />

        <Button
            android:id="@+id/button4"
            android:layout_width="0dp"
            android:layout_height="wrap_content"
            android:layout_weight="1"
            android:ellipsize="none"
            android:gravity="center"
            android:singleLine="true" />
    </LinearLayout>  

您可以使用visibilityVisibility.VIEW中的Visibility.GONE以编程方式播放。

在上面的布局中,我使用button隐藏了第一个android:visibility="gone"并将三个按钮平分展开。因此实现了buttons的统一外观。

但是,如果您只有一个button可见,那么您可能需要将其layout_width设置为wrap_content,否则它会分散到您的dialog width

根据您的要求,不需要使用TableLayout

答案 1 :(得分:0)

我根据自己的需要调整了这个问题的答案:android custom dialog with scrollview pushes buttons off the screen

布局如下。当对话框内容太大时,它会使按钮不会消失在屏幕底部,并且按钮文本不再截断,但按钮的大小不再相同。 如果我可以将按钮绘制得与按钮面板中最宽的按钮一样宽,那么这将是完美的。 &lt; - (如果您知道如何实现这一点,请发表评论):

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
        android:orientation="vertical"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:padding="10dip">
    <!-- this layout is the message count bar -->


    <!-- this layout is the title bar -->
    <LinearLayout
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:orientation="horizontal"
            android:layout_weight="0"
            >
        <ImageView
                android:id="@+id/image"
                android:padding="5dip"
                android:visibility="gone"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"/>
        <LinearLayout
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:orientation="vertical">
            <TextView
                    android:visibility="gone"
                    android:id="@+id/count"
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:textSize="16sp"
                    style="@style/CustomDialog.TextColor"/>
            <TextView
                    android:id="@+id/title"
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:layout_weight="1"
                    android:textStyle="bold"
                    style="@style/CustomDialog.TextColor"/>
        </LinearLayout>
    </LinearLayout>

    <!-- this is the body -->
    <ScrollView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_gravity="center_horizontal"
            android:layout_weight="1">
        <TextView
                android:id="@+id/body"
                android:gravity="center"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                style="@style/CustomDialog.TextColor"/>
    </ScrollView>

    <LinearLayout
        android:layout_height="wrap_content"
        android:layout_width="wrap_content"
        android:layout_gravity="bottom|center_horizontal"
        android:layout_weight="0">
        <LinearLayout
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:orientation="horizontal">

            <Button
                android:id="@+id/button1"
                android:layout_width="0dp"
                android:layout_height="wrap_content"
                android:layout_weight="1"
                android:ellipsize="none"
                android:visibility="gone"
                android:gravity="center"
                android:singleLine="true" />

            <Button
                android:id="@+id/button2"
                android:layout_width="0dp"
                android:layout_height="wrap_content"
                android:layout_weight="1"
                android:ellipsize="none"
                android:gravity="center"
                android:singleLine="true" />

            <Button
                android:id="@+id/button3"
                android:layout_width="0dp"
                android:layout_height="wrap_content"
                android:layout_weight="1"
                android:ellipsize="none"
                android:gravity="center"
                android:singleLine="true" />

            <Button
                android:id="@+id/button4"
                android:layout_width="0dp"
                android:layout_height="wrap_content"
                android:layout_weight="1"
                android:ellipsize="none"
                android:gravity="center"
                android:singleLine="true" />
        </LinearLayout>
    </LinearLayout>

    <!-- and this is where the buttons go -->
    <!--<TableLayout-->
            <!--android:layout_gravity="center_horizontal"-->
            <!--android:layout_height="wrap_content"-->
            <!--android:layout_width="wrap_content"-->
            <!--android:stretchColumns="*">-->
        <!--<TableRow>-->
            <!--<Button-->
                    <!--android:id="@+id/button1"-->
                    <!--android:gravity="center"-->
                    <!--android:visibility="gone"-->
                    <!--android:singleLine="true"-->
                    <!--android:layout_weight="1"-->
                    <!--android:layout_width="wrap_content"-->
                    <!--android:layout_height="wrap_content"/>-->
            <!--<Button-->
                    <!--android:id="@+id/button2"-->
                    <!--android:gravity="center"-->
                    <!--android:visibility="gone"-->
                    <!--android:singleLine="true"-->
                    <!--android:layout_weight="1"-->
                    <!--android:layout_width="wrap_content"-->
                    <!--android:layout_height="wrap_content"/>-->
            <!--<Button-->
                    <!--android:id="@+id/button3"-->
                    <!--android:gravity="center"-->
                    <!--android:visibility="gone"-->
                    <!--android:singleLine="true"-->
                    <!--android:layout_weight="1"-->
                    <!--android:layout_width="wrap_content"-->
                    <!--android:layout_height="wrap_content"/>-->
            <!--<Button-->
                    <!--android:id="@+id/button4"-->
                    <!--android:gravity="center"-->
                    <!--android:visibility="gone"-->
                    <!--android:singleLine="true"-->
                    <!--android:layout_weight="1"-->
                    <!--android:layout_width="wrap_content"-->
                    <!--android:layout_height="wrap_content"/>-->
        <!--</TableRow>-->
    <!--</TableLayout>-->
</LinearLayout>

秘密显然是三个顶级布局标签的权重。标题为layout_weight="0",正文为layout_weight="1",底部按钮面板为layout_weight="0"。不知道为什么会这样......