なぜ私がこれをやりたいのかは完全に別の議論ですが、すべてのアラートダイアログの右側にプラスのボタンを配置するための最良の方法を見つける必要があります。バージョン3.0以下ではボタンは通常OK /キャンセルとして表示され、4.0以降ではキャンセル/ OKであることに注意してください。可能な限り簡単な方法でアプリケーションにキャンセル/ OKを強制的に使用させたい。アプリケーションにたくさんのAlertDialogがあります。
残念ながら、私はあなたができるとは思いません。ただし、 documentation を引用するには:
注:AlertDialogに追加できるのは、各ボタンタイプの1つだけです。つまり、「ポジティブ」ボタンを複数持つことはできません。これにより、可能なボタンの数が3つ(ポジティブ、ニュートラル、ネガティブ)に制限されます。これらの名前は、技術的にはボタンの実際の機能とは無関係ですが、ボタンの機能を追跡するのに役立ちます。
したがって、さまざまなボタンを好きなように変えることができます。ここに表示されているのは、切り替えられた順序です(- this からの順序付け)。
Build.VERSION
そしてそれを使用して、実行時にどのボタンがどれであるかを決定します。
これが私の解決策です。それは私にとって仕事です。
// 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);
}
}
}
正のボタンのテキストを[キャンセル]に設定し、負のボタンを[OK]に設定できると考えましたが、それらはアルファベット順であることがわかりました。
すべてのデバイスのすべての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を実装する必要があることに注意してください。
時には完全に異なる視点が問題の解決策であるHIユーザーカルチャーです
In Androidでは、OSの「戻る」ボタンが存在するため、HIはかなり異なります(onBackPressed()thatまた、オペレーティングシステムHIで、ESC(接続された物理キーボード上のESC)を上書きすることもできます。
次に、次のコードのようにボタンを設定できます
builder.setNeutralButton( "Negative"、listener);
builder.setNegativeButton( "Neutral"、listener);
builder.setPositiveButton( "Positive"、listener);