为什么我想这样做是另一个完全不同的讨论,但我需要找出最好的方法来使所有的警示对话框都在右侧有确定按钮。请注意,在3.0及以下版本中,按钮通常显示为“确定/取消”,而在4.0及以上版本中,它是“取消/确定”。我希望以最简单的方式强制我的应用程序使用“取消/确定”方式。我在应用程序中有很多AlertDialogs。
为什么我想这样做是另一个完全不同的讨论,但我需要找出最好的方法来使所有的警示对话框都在右侧有确定按钮。请注意,在3.0及以下版本中,按钮通常显示为“确定/取消”,而在4.0及以上版本中,它是“取消/确定”。我希望以最简单的方式强制我的应用程序使用“取消/确定”方式。我在应用程序中有很多AlertDialogs。
所以你可以把不同的按钮变成你想要的任何东西。你所看到的是按钮顺序已经改变(参考这里的回答):注意:对于AlertDialog,您只能添加每个按钮类型的一个副本。也就是说,您不能有多个“positive”按钮。这限制了可能的按钮数为三个:positive、neutral和negative。这些名称在实际按钮功能上无关紧要,但应帮助您跟踪哪个按钮执行什么操作。
Build.VERSION
并在运行时使用它来确定哪个按钮是哪个。中立 - - - 负面 正面
。 - Rawling // 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);
}
}
}
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");
有时候,完全不同的观点是解决问题的方法,HI用户文化。
在Android中,由于操作系统“返回”按钮的存在(onBackPressed()也可以被覆盖,在附加物理键盘上为ESC),HI有所不同。
绝对没有必要交换任何按钮的顺序!
显然不是立即显而易见的,但您可以简单地将标签和操作设置为您可以使用的三个处理程序中的任何一个,即您不需要将 OK 按钮定义为positiveButton。
例如,您可以将取消操作附加到setNeutralButton()
按钮,将“我感觉很幸运”操作附加到setNegativeButton()
按钮。
Android没有与negative/positive/neutral
相关联的语义,因此您可以在setPositiveButton()
中取消对话框,并使用setNegativeButton()
确认对话框。只需设置正确的标签和操作。
示例:
new AlertDialog.Builder(ctx)
.setTitle("Switching buttons the easy way")
.setPositiveButton(android.R.string.cancel, new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
dialog.cancel();
}
})
.setNeutralButton(android.R.string.ok, new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
Toast.makeText(ctx, "I agree!", Toast.LENGTH_SHORT).show();
}
})
.setNegativeButton("I feel lucky...", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
Toast.makeText(ctx, "Make a bet", Toast.LENGTH_SHORT).show();
}
})
.create()
.show();