为什么我想要做的,这是另一个讨论完全是,但我需要弄清楚,使我的所有警报对话在其右侧的肯定按钮的最好方式。 请注意,在3.0版和下面的按钮通常显示为确定/取消和4.0及以上是取消/ OK。 我想迫使我的应用程序使用取消/在可能的最简单的方法确定。 我有很多的应用AlertDialogs的。
Answer 1:
不幸的是,我不相信你可以。 然而,引用文档 :
注意:您只能添加每个按钮类型的AlertDialog之一。 也就是说,你不能有一个以上的“正”按钮。 这限制了可能的按钮的数量,以三:正,中性和负。 这些名称在技术上无关的按钮的实际功能,而是应该帮助你跟踪哪些人做什么。
所以,你可以把不同的按钮到任何你想要的。 你现在看到的是具有交换(从点餐,为了这个答案):
- 上之前ICS设备,按钮顺序(从左到右)阳性 - 中立 - NEGATIVE。
- 在使用ICS更新的设备,按钮顺序(从左至右)现负 - 中性 - 正。
你可以尝试检查Build.VERSION
并用它来决定哪个按钮是在运行时。
Answer 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);
}
Answer 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);
}
}
}
Answer 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能够在活动的再创造恢复对话状态。
Answer 5:
我想我可以只设置了积极的按钮,取消和负就OK了文本,但事实证明他们是按字母顺序排列。
Answer 6:
有时完全不同的观点是解决一个问题,HI-用户的文化。
- 在Win32中的确定和取消按钮是绝对必要的或对话将无法正常工作。
在Android中的HI是因为OS“后退”按钮的存在 (onBackPressed(),它也可以被覆盖,ESC上连接的物理键盘)在手术系统HI 有很大的不同 。
- 有没有必要为一个负在大多数情况下/取消按钮。
- 所以大部分对话都足以与肯定按钮
- 那么有没有按钮顺序问题上 ,肯定按钮是一个人吗?
- 如果你在编辑字段将其设置为edittext.setSingleLine(); 并输入将焦点移到单肯定按钮。 再次输入其正面按下按钮。
- 如果用户希望推动取消,他按下OS“后退”按钮 (正如我们不需要解释OS HI策略给用户的核心开发人员,也就是OS发行人的问题。我们只是离开Android的对话框没有取消按钮。)
Answer 7:
- 在AlertDialog buttonPanel,三个按钮排序[中性] [负] [正]
然后就可以设置类似以下代码按钮
builder.setNeutralButton( “负”,听者);
builder.setNegativeButton( “中性”,听者);
builder.setPositiveButton( “正”,听者);