Как установить порядок положительных и отрицательных кнопок в AlertDialog?

Почему я хочу это сделать, это совсем другое обсуждение, но мне нужно выяснить лучший способ сделать все мои диалоги оповещения положительной кнопкой с правой стороны. Обратите внимание, что в версии 3.0 и ниже кнопки обычно отображаются как OK / Cancel, а в 4.0 и выше-Cancel / OK. Я хочу заставить свое приложение использовать Cancel / OK самым простым способом. У меня много AlertDialogs в приложении.

6 ответов


Это мое решение. Это работа для меня.

    // Show alertDialog after building
    AlertDialog alertDialog = createAlertDialog(context);
    alertDialog.show();
    // and find positiveButton and negativeButton
    Button positiveButton = (Button) alertDialog.findViewById(android.R.id.button1);
    Button negativeButton = (Button) alertDialog.findViewById(android.R.id.button2);
    // then get their parent ViewGroup
    ViewGroup buttonPanelContainer = (ViewGroup) positiveButton.getParent();
    int positiveButtonIndex = buttonPanelContainer.indexOfChild(positiveButton);
    int negativeButtonIndex = buttonPanelContainer.indexOfChild(negativeButton);
    if (positiveButtonIndex < negativeButtonIndex) {
        // prepare exchange their index in ViewGroup
        buttonPanelContainer.removeView(positiveButton);
        buttonPanelContainer.removeView(negativeButton);
        buttonPanelContainer.addView(negativeButton, positiveButtonIndex);
        buttonPanelContainer.addView(positiveButton, negativeButtonIndex);
    }

Вы можете продлить AlertDialog.Builder в силу приказ:

public class MyDialog extends AlertDialog.Builder {

    public MyDialog(Context arg0) {
        super(arg0);
    }

    @Override
    public Builder setPositiveButton(CharSequence text, OnClickListener listener) {
        if (Build.VERSION.SDK_INT <= Build.VERSION_CODES.ICE_CREAM_SANDWICH) {
            return super.setNegativeButton(text, listener);
        } else {
            return super.setPositiveButton(text, listener);
        }

    }

    @Override
    public Builder setNegativeButton(CharSequence text, OnClickListener listener) {
        if (Build.VERSION.SDK_INT <= Build.VERSION_CODES.ICE_CREAM_SANDWICH) {
            return super.setPositiveButton(text, listener);
        } else {
            return super.setNegativeButton(text, listener);
        }
    }

}

Я создал решение для принудительного порядка кнопок для любой версии Android на любом устройстве.

идея в том, что мы можем получить список кнопок диалога, чтобы они появлялись на экране, и установить текст и действия в нужном порядке. Это гарантирует, что у нас будет такой же заказ на любом устройстве.

пожалуйста, проверьте мой репозитории GitHub

вот пример создания и отображения диалогового окна:

 new FixedOrderDialogFragment.Builder()
    .setLeftButtonText(R.string.left)
    .setCenterButtonText(R.string.center)
    .setRightButtonText(R.string.right)
    .setDefaultButton(FixedOrderDialogFragment.BUTTON_RIGHT)
    .setMessage(R.string.message)
    .setTitle(R.string.app_name)
    .create()
 .show(getSupportFragmentManager(), "DEMO");

обратите внимание, что деятельность предпринимателя следует реализовать FixedOrderDialogFragment.FixedOrderDialogListener уметь восстановить диалог государства на деятельность воссоздание.


Я подумал, что я мог бы просто установить текст для положительной кнопки для отмены и отрицательной для OK, но оказывается, что они в алфавитном порядке.


  • в AlertDialog buttonPanel три кнопки сортируются по [нейтральному] [отрицательному] [положительному]
  • затем вы можете установить кнопки как следующие коды

    строитель.setNeutralButton("негативный",слушатель);

    строитель.setNegativeButton("нейтральный",слушатель);

    строитель.setPositiveButton("положительный",слушатель);