Android AlertDialog Перемещение PositiveButton вправо и NegativeButton слева
Я новичок в Android.
В настоящее время я хочу показать окно AlertDialog
с кнопками "ОК" и "Отмена".
По умолчанию PositiveButton: Left, NegativeButton: Right
Можете ли вы сообщить мне, как я могу поместить PositiveButton в правую сторону и NegativeButton влево?
Есть ли шанс/проблема, если Negativebutton вызывает плохой звук при нажатии OK, если мы меняем текст "OK" на NegativeButton и "Cancel" на PositiveButton.
Мой код:
AlertDialog.Builder builder = new AlertDialog.Builder(SUtils.getContext());
builder.setMessage("Confirmation?")
.setCancelable(false)
.setNegativeButton("Cancel", new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int id) {
//Todo
dialog.cancel();
}
})
.setPositiveButton("OK", new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int id) {
//TOdo
}
})
dialog = builder.create();
Спасибо,
Angel
Ответы
Ответ 1
Это может быть не прямой ответ. Но только некоторая информация по смежной теме. От этот поток в собственном форуме Google, сказал Ромен.
В порядке продвижения порядок положительных/отрицательных кнопок будет используется в ICS.
и соглашение для каждой версии ОС
- На устройствах до сотового устройства порядок кнопок (слева направо)
ПОЗИТИВНО - НЕЙТРАЛЬНО - НЕГАТИВНО.
- На новых устройствах, использующих тему Голо, порядок кнопок (слева
right) теперь НЕГАТИВНО - НЕЙТРАЛЬНО - ПОЗИТИВНО.
Если это соглашение, этот андроид /Google хочет следовать, не лучше ли вам следовать за тем же, так как ваши пользователи не будут использовать ваше приложение в одиночку. В конце концов, удобство для пользователя - это первое, что ищет разработчик.
Ответ 2
AlertDialog.Builder builder = new AlertDialog.Builder(SUtils.getContext());
builder.setMessage("Confirmation?")
.setCancelable(false)
.setNegativeButton("OK", new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int id) {
//TOdo
}
})
.setPositiveButton("Cancel", new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int id) {
//TOdo
dialog.cancel();
}
})
diaglog = builder.create();
Но я рекомендую согласиться с конвенцией, если у вас нет веских оснований для изменения порядка. Это облегчит пользователям использование вашего приложения.
Ответ 3
Невозможно изменить настройку diffault в android
Но вы можете изменить текст ok до cancle
установите функционально аккрецию этого
AlertDialog.Builder builder = new AlertDialog.Builder(SUtils.getContext());
builder.setMessage("Confirmation?")
.setCancelable(false)
.setNegativeButton("OK",
new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int id) {
//TOdo
}
})
.setPositiveButton("CANCEL", new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int id) {
//TOdo
dialog.cancel();
}
});
dialog = builder.create();
Ответ 4
проверьте https://github.com/hslls/order-alert-buttons
dependencies {
compile 'com.github.hslls:order-alert-buttons:1.0.0'
}
AlertDialogParams params = new AlertDialogParams();
params.mTitle = "title";
params.mMessage = "message";
params.mPositiveText = "Ok";
params.mNegativeText = "Cancel";
params.mCancelable = true;
params.mAlign = BUTTON_ALIGN.POSITIVE_BUTTON_LEFT; // fix button position
params.mClickListener = new AlertDialogClickListener() {
@Override
public void onPositiveClicked() {
}
@Override
public void onNegativeClicked() {
}
};
AlertDialog dialog = AlertDialogBuilder.createAlertDialog(this, params);
Ответ 5
На самом деле простой способ переместить кнопки AlertDialog
в правую сторону - это скрыть leftSpacer
, a LinearLayout
внутри основного XML, который обрабатывает макет по умолчанию.
// Fetch the PositiveButton
final Button lPositiveButton = lDialog.getButton(AlertDialog.BUTTON_POSITIVE);
// Fetch the LinearLayout.
final LinearLayout lParent = (LinearLayout) lPositiveButton.getParent();
// Ensure the Parent of the Buttons aligns it contents to the right.
lParent.setGravity(Gravity.RIGHT);
// Hide the LeftSpacer. (Strict dependence on the order of the layout!)
lParent.getChildAt(1).setVisibility(View.GONE);
Ответ 6
Я выяснил, что между neutral button
и -ve/+ve buttons
есть место размещения с местом "1" в buttonBarLayout
, в котором находятся кнопки.
Итак, сначала нам нужно удалить это пространство и сделать видимость GONE
(invisible
позволит ему по-прежнему занимать пробел в buttonBarLayout
), и нам лучше использовать метод onShowListner лучше, чем это делать после показывая диалог:
alertDialog.setOnShowListener(new DialogInterface.OnShowListener() {
@Override
public void onShow(DialogInterface dialog) {
Button neutralButton = alertDialog.getButton(AlertDialog.BUTTON_NEUTRAL);
LinearLayout view = (LinearLayout) neutralButtonOrAnyOtherBtnFromThe3Btns.getParent();
Space space= (Space) view.getChildAt(1);
}
});
тогда остальное - ваш дизайн, пожелайте, чтобы это помогло
Ответ 7
Это не самый элегантный способ, но он сделает то, что вы хотите
AlertDialog.Builder builder = new AlertDialog.Builder(SUtils.getContext());
builder.setMessage("Confirmation?")
.setCancelable(false)
.setNegativeButton("OK", new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int id) {
//TOdo
dialog.cancel();
}
})
.setPositiveButton("Cancel", new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int id) {
//TOdo
}
})
diaglog = builder.create();
Просто сделайте кнопку Cancel
положительной, а кнопку Ok
- отрицательной.