【问题标题】:Order of buttons in an AlertDialogAlertDialog 中的按钮顺序
【发布时间】:2018-06-21 18:29:58
【问题描述】:

我构建了一个带有 3 个按钮(正、中性和负)的 AlertBox

myDialogBox = AlertDialog.Builder(context, R.style.MyAlertDialogTheme);

然后我像这样设置按钮:

myDialogBox.setPositiveButton(sBuyAtlas, new alogInterface.OnClickListener() 
myDialogBox.setNeutralButton(sBuyAtlas, new alogInterface.OnClickListener() 
myDialogBox.setNegativeButton(sBuyAtlas, new alogInterface.OnClickListener() 

在运行时,顺序是 积极 - 消极 - 中性

我怎样才能实现取消是正确的。通常,“取消”位于对话框的右侧。我怎样才能做到这一点,而不会误用中性作为取消?

【问题讨论】:

  • 您可以制作自定义对话框来实现这一点..
  • 所以我真的需要自定义我自己的对话框来做到这一点。没有其它的方法 ?我希望我的代码尽可能小。
  • 如果您创建自定义警报对话框会更好。但是,您可以查看 this discussion 以更改默认对齐方式。

标签: android android-alertdialog


【解决方案1】:

您可以删除所有按钮,然后按您喜欢的顺序再次添加它们

 AlertDialog alerDialog = new AlertDialog.Builder().build();
    Button posBtn = (Button) alertDialog.findViewById(android.R.id.button1);
    Button negBtn = (Button) alertDialog.findViewById(android.R.id.button2);
    Button neuBtn = (Button) alertDialog.findViewById(android.R.id.button3);

    //get parent ViewGroup
     ViewGroup parentLayout = (ViewGroup) posBtn.getParent();

    //get child indexes
    int posIndex = parentLayout.indexOfChild(posBtn);
    int negindex = parentLayout.indexOfChild(negBtn);
    int neuIndex = parentLayout.indexOfChild(neuBtn);

     parentLayout.removeAllViews();
     parentLayout.addView(neuIndex,posBtn); //< --- swapping neutral and positive
     parentLayout.addView(posIndex,neuBtn);
     parentLayout.addView(negIndex,negBtn); 

【讨论】:

  • 感谢您的帮助,但我想如果我必须为按钮创建布局,那么我也可以从头开始创建自定义对话框。
  • 抱歉,您不需要创建布局,这是默认的警报对话框本身
【解决方案2】:

如果您尝试设置自定义对话框,@Ranjan 答案也应该同时工作,这里是系统 dailog 克隆布局,只需操作按钮并根据您的要求对其进行排序,并将其设置为警报对话框的视图。

<?xml version="1.0" encoding="utf-8"?>

<LinearLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/parentPanel"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:orientation="vertical"
    android:paddingTop="9dip"
    android:paddingBottom="3dip"
    android:paddingStart="3dip"
    android:paddingEnd="1dip">

    <LinearLayout android:id="@+id/topPanel"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:minHeight="54dip"
        android:orientation="vertical">
        <LinearLayout android:id="@+id/title_template"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:orientation="horizontal"
            android:gravity="center_vertical"
            android:layout_marginTop="6dip"
            android:layout_marginBottom="9dip"
            android:layout_marginStart="10dip"
            android:layout_marginEnd="10dip">
            <ImageView android:id="@+id/icon"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_gravity="top"
                android:paddingTop="6dip"
                android:paddingEnd="10dip"
                android:src="@drawable/ic_dialog_info" />
            <com.android.internal.widget.DialogTitle android:id="@+id/alertTitle"
                style="?android:attr/textAppearanceLarge"
                android:singleLine="true"
                android:ellipsize="end"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:textAlignment="viewStart" />
        </LinearLayout>
        <ImageView android:id="@+id/titleDivider"
            android:layout_width="match_parent"
            android:layout_height="1dip"
            android:visibility="gone"
            android:scaleType="fitXY"
            android:gravity="fill_horizontal"
            android:src="@android:drawable/divider_horizontal_dark" />
        <!-- If the client uses a customTitle, it will be added here. -->
    </LinearLayout>

    <LinearLayout android:id="@+id/contentPanel"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_weight="1"
        android:orientation="vertical">
        <ScrollView android:id="@+id/scrollView"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:paddingTop="2dip"
            android:paddingBottom="12dip"
            android:paddingStart="14dip"
            android:paddingEnd="10dip"
            android:overScrollMode="ifContentScrolls">
            <TextView android:id="@+id/message"
                style="?android:attr/textAppearanceMedium"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:padding="5dip" />
        </ScrollView>
    </LinearLayout>

    <FrameLayout android:id="@+id/customPanel"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_weight="1">
        <FrameLayout android:id="@+android:id/custom"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:paddingTop="5dip"
            android:paddingBottom="5dip" />
    </FrameLayout>

    <LinearLayout android:id="@+id/buttonPanel"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:minHeight="54dip"
        android:orientation="vertical" >
        <LinearLayout
            style="?android:attr/buttonBarStyle"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:orientation="horizontal"
            android:paddingTop="4dip"
            android:paddingStart="2dip"
            android:paddingEnd="2dip"
            android:measureWithLargestChild="true">
            <LinearLayout android:id="@+id/leftSpacer"
                android:layout_weight="0.25"
                android:layout_width="0dip"
                android:layout_height="wrap_content"
                android:orientation="horizontal"
                android:visibility="gone" />
            <Button android:id="@+id/button1"
                android:layout_width="0dip"
                android:layout_gravity="start"
                android:layout_weight="1"
                style="?android:attr/buttonBarButtonStyle"
                android:maxLines="2"
                android:layout_height="wrap_content" />
            <Button android:id="@+id/button3"
                android:layout_width="0dip"
                android:layout_gravity="center_horizontal"
                android:layout_weight="1"
                style="?android:attr/buttonBarButtonStyle"
                android:maxLines="2"
                android:layout_height="wrap_content" />
            <Button android:id="@+id/button2"
                android:layout_width="0dip"
                android:layout_gravity="end"
                android:layout_weight="1"
                style="?android:attr/buttonBarButtonStyle"
                android:maxLines="2"
                android:layout_height="wrap_content" />
            <LinearLayout android:id="@+id/rightSpacer"
                android:layout_width="0dip"
                android:layout_weight="0.25"
                android:layout_height="wrap_content"
                android:orientation="horizontal"
                android:visibility="gone" />
        </LinearLayout>
     </LinearLayout>
</LinearLayout>

将视图设置回警报对话框

LayoutInflater inflater = this.getLayoutInflater();
View dialogView = inflater.inflate(R.layout.alert_dialog, null);
myDialogBox.setView(dialogView);

【讨论】:

    猜你喜欢
    • 2012-07-12
    • 2011-04-10
    • 2011-08-14
    • 1970-01-01
    • 1970-01-01
    • 2011-08-09
    • 1970-01-01
    • 2011-11-23
    • 2011-12-14
    相关资源
    最近更新 更多