3

ICS 以前は、AlertDialog の標準的な順序は「OK」/「キャンセル」でしたが、ICS では変更されました (標準的な順序は「キャンセル」/「OK」になりました)。

ただし、使っても

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

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、「キャンセル」コードは「OK」コードと同じくらい簡単に持つことができます。実際、これらは単なる定数です(正:-1、ニュートラル:-2、負:-3)。

ポジティブ(左)ボタンとネガティブ(右)ボタンにそれぞれとのラベルが付いたICS前のダイアログを想像してみて<-ください->。ICS既存の定数の値を自動的に切り替えた場合に何が起こるかを見てください。

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

ボタンはもう意味がありません...

つまり、ICSは、ボタンを自動的に並べ替えることで、既存のコードを1世代で壊してしまうでしょう。したがって、デフォルトのラベルの順序がICSの前後のデバイスで一貫していないという考えが本当に気になる場合は、エイリアスではなく定数値(、、)を使用することを検討してください-1-2-3

于 2012-10-02T19:03:00.320 に答える