1

我有一个警报对话框,其中以编程方式添加了正负按钮。在对话框布局中还有两个按钮,位于 AlertDialog 的原生按钮之上。

对话

当这两个紧挨着时,我意识到在这个对话框中,原生的正/负/中性按钮的权重不同。它们的文本内容决定了它们的水平权重,而不是每个占据对话框的 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>
4

1 回答 1

12

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

我执行以下操作:

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,您可以通过这种方式设置权重和宽度。感谢您的评论,我希望这可以帮助将来的人。

于 2013-07-31T23:32:20.553 回答