Android - 使AlertDalog按钮的大小统一

时间:2013-07-31 22:51:41

标签: android android-alertdialog

我有一个警告对话框,其中以编程方式添加了正面和负面按钮。在对话框布局中,还有两个按钮,位于AlertDialog的本机按钮上方。

dialog

当这两者紧挨着时,我意识到在这个对话框中,原生正/负/中性按钮的权重不同。它们的文本内容决定了它们的水平权重,而不是每个占用对话框的50%(如果有3个按钮则为33%)。因此,在我的情况下,负片按钮的文本比正面按钮的文本长,我们得到的内容看起来就像我上面发布的图像。

我找不到办法解决这个问题,有没有人有想法?

谢谢!

请求的XML:

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

    <TextView android:id="@+id/rcd_msg"
              android:layout_width="wrap_content"
              android:layout_height="wrap_content"
              android:layout_centerHorizontal="true"
              android:layout_margin="8dp"
              android:text="@string/rating_dialog_text"
              android:textSize="14dp"
              android:textColor="@android:color/white"
              android:gravity="center"/>

    <RatingBar android:id="@+id/rcd_rating_bar"
               android:layout_width="wrap_content"
               android:layout_height="wrap_content"
               android:layout_below="@id/rcd_msg"
               android:layout_margin="8dp"
               android:paddingBottom="10dp"
               android:numStars="5"
               android:rating="0"
               android:layout_centerHorizontal="true"/>

    <RelativeLayout android:layout_height="56dp"
                    android:layout_width="match_parent"
                    android:layout_below="@id/rcd_rating_bar">

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

            <RelativeLayout android:id="@+id/rcd_image"
                            android:layout_width="0dp"
                            android:layout_height="fill_parent"
                            android:background="@color/selectable_transparent"
                            android:layout_weight="1">

                <TextView android:id="@+id/rcd_image_text"
                          android:layout_height="wrap_content"
                          android:layout_width="wrap_content"
                          android:layout_centerInParent="true"
                          android:paddingLeft="0dp"
                          android:gravity="center"
                          android:text="@string/add_image"
                          android:textColor="@android:color/white"
                          android:textSize="16sp"
                          android:clickable="true"/>

                <ImageView android:id="@+id/rcd_image_img"
                           android:layout_height="32dp"
                           android:layout_width="32dp"
                           android:layout_centerVertical="true"
                           android:layout_margin="8dp"
                           android:layout_toLeftOf="@id/rcd_image_text"
                           android:scaleType="centerInside"
                           android:src="@android:drawable/ic_menu_camera"/>

            </RelativeLayout>

            <RelativeLayout android:id="@+id/rcd_comment"
                            android:layout_width="0dp"
                            android:layout_height="fill_parent"
                            android:background="@color/selectable_transparent"
                            android:layout_weight="1">

                <TextView android:id="@+id/rcd_comment_text"
                          android:layout_height="wrap_content"
                          android:layout_width="wrap_content"
                          android:layout_centerInParent="true"
                          android:paddingRight="6dp"
                          android:gravity="center"
                          android:text="@string/add_comment"
                          android:textColor="@android:color/white"
                          android:textSize="16sp"
                          android:clickable="true"/>

                <ImageView android:id="@+id/rcd_comment_img"
                           android:layout_height="32dp"
                           android:layout_width="32dp"
                           android:layout_centerVertical="true"
                           android:layout_margin="4dp"
                           android:layout_toRightOf="@id/rcd_comment_text"
                           android:scaleType="centerInside"
                           android:src="@drawable/ic_menu_comment"/>

            </RelativeLayout>

        </LinearLayout>

        <LinearLayout android:layout_width="1dp"
                      android:layout_height="38dp"
                      android:layout_centerHorizontal="true"
                      android:layout_alignParentBottom="true"
                      android:orientation="horizontal"
                      android:layout_margin="10dp"
                      android:background="@color/transparent_white" />

    </RelativeLayout>

</RelativeLayout>

1 个答案:

答案 0 :(得分:9)

想出一个解决方案......不知道为什么我之前没有想到它。

我执行以下操作:

mRateConcertDialog.setOnShowListener(new OnShowListener() {

    @Override
    public void onShow(DialogInterface d) {
        Button posButton = mRateConcertDialog.getButton(DialogInterface.BUTTON_POSITIVE);
        Button negButton = mRateConcertDialog.getButton(DialogInterface.BUTTON_NEGATIVE);

        LayoutParams posParams = (LayoutParams) posButton.getLayoutParams();
        posParams.weight = 1;
        posParams.width = LayoutParams.MATCH_PARENT;

        LayoutParams negParams = (LayoutParams) negButton.getLayoutParams();
        negParams.weight = 1;
        negParams.width = LayoutParams.MATCH_PARENT;

        posButton.setLayoutParams(posParams);
        negButton.setLayoutParams(negParams);
    }
});

基本上,您必须在显示对话框后操纵按钮的大小。因此,创建一个onShowListener,你可以这样设置权重和宽度。感谢您的评论,我希望这可以帮助将来的某个人。