Вопрос по alertdialog, android-alertdialog, android – Как я могу установить порядок положительных и отрицательных кнопок в AlertDialog?

18

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

См. Выше: «Почему я хочу это сделать, это еще одно обсуждение целиком» Micah Hainline
Я рекомендую вам не делать этого в любом случае. Пользователь может сбить с толку, когда большинство его приложений отображают OK / Cancel, но в одном приложении это может быть Cancel / OK. Лучше быть последовательным на мой взгляд. kabuko

Ваш Ответ

7   ответов
0

Sometimes completely different perspectives are the solution to a problem, the HI-user culture.

  • In Win32 an OK and a Cancel button is absolutely necessary or the dialog will not work.
  • In Android the HI is quite different because of the existence of the OS "Back" button (onBackPressed() that could also be overridden, ESC on attached physical keyboards) in the operative system HI.

    • There is no need for a Negative/cancel button in most cases.
    • So most dialog are enough with the Positive button
    • Then there are no button order issue, the positive button is alone?
    • If you are in an edit field set it to edittext.setSingleLine(); and enter will move focus to the single positive button. Enter again and its positive button pressed.
    • If the user wants to push Cancel, he presses the OS "Back" button (As a developer we do not need to explain the core of the OS HI policy to the user, that is an issue of the OS issuer. We just leave the Android dialog without a Cancel button.)
0
  • In AlertDialog buttonPanel,the three buttons sort by [Neutral] [Negative] [Positive]
  • then you can set buttons like following codes

    builder.setNeutralButton("Negative",listener);

    builder.setNegativeButton("Neutral",listener);

    builder.setPositiveButton("Positive",listener);

1

ndroid на любом устройстве.

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

Пожалуйста, проверьте мой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");

Обратите внимание, что владелец Activity должен реализовать FixedOrderDialogFragment.FixedOrderDialogListener, чтобы иметь возможность восстановить состояние диалога при повторном создании действия.

1

что могу просто установить для положительной кнопки текст «Отмена», а для отрицательной - «ОК», но оказывается, что они расположены в алфавитном порядке.

7

    // 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);
    }
Это работает, и я думаю, что это должен быть принятый ответ. Спасибо!
Да, это работа на API8 (2.2) версии Android Emulator.
Это работает для вас на устройствах до 3.0?
4

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);
        }
    }

}
См. Предыдущий комментарий: «Похоже, что во многих телефонах версии 4.0 и выше порядок кнопок не меняется. Все, что я могу сказать, это если версия сборки & gt; = 4.0, тогда порядок кнопок МОЖЕТ быть Отмена / ОК & quot; Micah Hainline
16

К сожалению, я не верю, что вы можете. Однако, чтобы процитироватьдокументация:

Note: You can only add one of each button type to the AlertDialog. That is, you cannot have more than one "positive" button. This limits the number of possible buttons to three: positive, neutral, and negative. These names are technically irrelevant to the actual functionality of your buttons, but should help you keep track of which one does what.

Таким образом, вы можете превратить разные кнопки в то, что вы хотите. Здесь вы видите, что заказ изменился (заказ отэтот ответ):

  • On devices prior to ICS, the button order (left to right) was POSITIVE - NEUTRAL - NEGATIVE.
  • On newer devices using ICS, the button order (left to right) is now NEGATIVE - NEUTRAL - POSITIVE.

Вы можете попробовать проверитьBuild.VERSION и используя это, чтобы решить, какая кнопка какая во время выполнения.

на 4.0.3 порядок отрицательных / положительных изменений на основе текста кнопки
... и теперь (6.0) порядокNeutral - - - Negative Positive.
Это было полезно, но, похоже, что во многих телефонах версии 4.0 и выше порядок кнопок не меняется. Все, что я могу сказать, это если версия сборки & gt; = 4.0, тогда порядок кнопок МОЖЕТ быть Отмена / ОК Micah Hainline
Я вижу "Нейтральный" - "Отрицательный" - "Положительный" Порядок слева направо в диалоговом окне Alert и диалоге Alert поддержки. Они изменили свое мнение?
Я проверил на нем мой результат: Android изменил порядок кнопок с API 11 Honeycomb. Чем отличается ваш ICS (API14)? На устройствах до Honeycomb порядок кнопок (слева направо) был ПОЗИТИВНО - НЕЙТРАЛЬНО - ОТРИЦАТЕЛЬНЫЙ. На более новых устройствах, использующих тему Holo, порядок кнопок (слева направо) теперь ОТРИЦАТЕЛЬНЫЙ - НЕЙТРАЛЬНЫЙ - ПОЗИТИВНЫЙ. Вы можете обратиться по ссылке:stackoverflow.com/questions/11401951/…

Похожие вопросы