Как установить порядок положительных и отрицательных кнопок в AlertDialog?
Почему я хочу это сделать, это еще одна дискуссия, но мне нужно выяснить, как сделать все мои диалоговые окна с положительной кнопкой справа. Обратите внимание, что в версии 3.0 и ниже кнопки обычно отображаются как "ОК/Отмена", а в 4.0 и выше - "Отмена" / "ОК". Я хочу заставить приложение использовать Cancel/OK самым простым способом. У меня есть много AlertDialogs в приложении.
Ответы
Ответ 1
К сожалению, я не думаю, что вы можете. Однако, чтобы процитировать документация:
Примечание. Вы можете добавить только один тип каждой кнопки в AlertDialog. То есть у вас не может быть более одной "положительной" кнопки. Это ограничивает количество возможных кнопок до трех: положительных, нейтральных и отрицательных. Эти имена технически не имеют отношения к фактической функциональности ваших кнопок, но должны помочь вам отслеживать, что делает что-то.
Итак, вы можете превратить разные кнопки в то, что вы хотите. То, что вы видите здесь, - это порядок, который переключился (заказывая этот ответ):
- На устройствах до ICS порядок кнопок (слева направо) был ПОЗИТИВНО - НЕЙТРАЛЬНО - НЕГАТИВНО.
- На новых устройствах, использующих ICS, порядок кнопок (слева направо) теперь НЕГАТИВНО - НЕЙТРАЛЬНО - ПОЗИТИВНО.
Вы можете попробовать проверить Build.VERSION
и использовать это, чтобы решить, какая кнопка находится во время выполнения.
Ответ 2
это мое решение. Это работа для меня.
// 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);
}
Ответ 3
Вы можете расширить 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
Я создал решение для принудительного упорядочения кнопок для любой версии 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, чтобы иметь возможность восстановить состояние диалога при восстановлении активности.
Ответ 5
Я решил, что могу просто установить текст для положительной кнопки "Отмена", а отрицательный - "ОК", но оказывается, что они находятся в алфавитном порядке.
Ответ 6
- В AlertDialog buttonPanel три кнопки сортируются по [Нейтральный] [Отрицательный] [Положительный]
-
тогда вы можете установить такие кнопки, как следующие коды
builder.setNeutralButton( "Негативный", слушатель);
builder.setNegativeButton( "нейтральный", слушатель);
builder.setPositiveButton( "Положительный", слушатель);