Как установить порядок положительных и отрицательных кнопок в 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("положительный",слушатель);