我在对话框布局中有一组四个按钮,根据显示的数据,根据需要显示和消失。我希望底部的按钮具有相同的大小(最大按钮的大小),并始终拉伸以适应单行上按钮上的文本而不截断或椭圆化。代码和截图包括:
<?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>
此外,当正文文本太大时,按钮最终会消失,为文本腾出空间。我需要完全相反的行为(按钮始终显示在它们的整体中,并且对话框的主体被截断)。例如:
答案 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>
您可以使用visibility
和Visibility.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"
。不知道为什么会这样......