0

I build an AlertBox with 3 buttons (positiv, neutral & negativ):

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

Then I set the buttons like so:

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

At runtime the order is positiv - negativ - neutral

How can I achieve the cancel to be right. It is common, that "cancel" is on the rigth side of an dialog. How can I do that, without missusing the neutral as cancel ?

AlexTa
  • 5,133
  • 3
  • 29
  • 46
mcfly soft
  • 11,289
  • 26
  • 98
  • 202
  • You can make custom dialog to achieve that.. – Shivam Oberoi Jan 12 '18 at 10:04
  • So I really need to customize my own dialog to do that. No other way ? I would like to have my code as small as possible. – mcfly soft Jan 12 '18 at 10:06
  • Its better if you create custom Alert dialog . However you can have look into [this discussion](https://stackoverflow.com/questions/30743038/align-alertdialog-buttons-to-center) to change alignment in the default one . – ADM Jan 12 '18 at 10:06

2 Answers2

1

You can get remove all buttons and then add them again in your preferred order

 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); 
Rajan Kali
  • 12,627
  • 3
  • 25
  • 37
0

@Ranjan answer should also work meanwhile if you try to set the custom dialog here is the system dailog clone layout, just manipulate buttons and order it according to your requirement and set as the view to alert dialog.

<?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>

set the view back to alert dialog

LayoutInflater inflater = this.getLayoutInflater();
View dialogView = inflater.inflate(R.layout.alert_dialog, null);
myDialogBox.setView(dialogView);
vikas kumar
  • 10,447
  • 2
  • 46
  • 52