3

我知道在 ICS 之前,AlertDialog 中的标准订单是“Ok”/“Cancel”,并且在 ICS 中发生了变化(标准订单变成了“Cancel”/“Ok”)

但是,即使我使用

alert.setButton(AlertDialog.BUTTON_POSITIVE, "Ok", ...)
alert.setButton(AlertDialog.BUTTON_NEGATIVE, "Cancel", ...)

我在 pre-ICS 和 ICS 中运行应用程序得到了相同的结果:正面选项出现在左侧,负面选项出现在右侧。

这不应该是自动的吗,因为我们使用系统常量来定义正面 (AlertDialog.BUTTON_POSITIVE) 和负面 (AlertDialog.BUTTON_NEGATIVE) 的位置?

编辑: 接受解决方案后,我想指出我现在正在使用以下代码在 ICS 和 pre-ICS 中以正确的顺序设置按钮:

if (Build.VERSION.SDK_INT < Build.VERSION_CODES.ICE_CREAM_SANDWICH) { // pre-ICS, show Positive/Negative
    alertDialog.setButton(labelPositive, positiveListener);
    alertDialog.setButton2(labelNegative, negativeListener);    
} else { // ICS+, show Negative/Positive
    alertDialog.setButton(labelNegative, negativeListener);
    alertDialog.setButton2(labelPositive, positiveListener);
}
4

1 回答 1

2

我不确定您期望得到什么答案...常数值是相同的,Android 只是换了措辞。

您可能知道它BUTTON_POSITIVE没有与“肯定”行动相关联的授权。因此BUTTON_POSITIVE,“取消”代码与“确定”代码一样容易,实际上它们只是常量(正数:-1,中性:-2,负数:-3)。

<-想象一下带有分别标记为和的正(左)和负(右)按钮的 pre-ICS 对话框->。观察如果 ICS确实自动切换现有常量的值会发生什么:

        Pre-ICS Dialog          |        Post-ICS Dialog
--------------------------------|-------------------------------
      | <- |       | -> |       |      | -> |       | <- |
 ie.   "Ok"       "Cancel"      |     "Cancel"       "Ok"     

按钮不再有意义...

简而言之,ICS 会通过自动重新排序按钮在一代中破坏现有代码。因此,如果在ICS 之前和之后的设备中默认标签的顺序不一致想法真的让您感到困扰,那么请考虑使用它们的常量值 ( -1, -2, -3) 而不是它们的别名。

于 2012-10-02T19:03:00.320 回答