AlertDialogをAndroidに表示すると、画面の中央に表示されます。位置を変更する方法はありますか?
さまざまな投稿で検索した後、私は解決策を見つけました。
コードは次のとおりです。
private CharSequence[] items = {"Set as Ringtone", "Set as Alarm"};
AlertDialog.Builder builder = new AlertDialog.Builder(this);
builder.setItems(items, new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int item) {
if(item == 0) {
} else if(item == 1) {
} else if(item == 2) {
}
}
});
AlertDialog dialog = builder.create();
dialog.requestWindowFeature(Window.FEATURE_NO_TITLE);
WindowManager.LayoutParams wmlp = dialog.getWindow().getAttributes();
wmlp.gravity = Gravity.TOP | Gravity.LEFT;
wmlp.x = 100; //x position
wmlp.y = 100; //y position
dialog.show();
ここで、x位置の値は左から右へのピクセルです。 yの場合、位置の値は下から上です。
たとえば、progressdialogをもう少し下に移動し、exaktピクセル位置を設定しない場合、これで十分です。
progressDialog.getWindow().getAttributes().verticalMargin = 0.2F;
設定が情報効果になるように、次のコードを追加しましたdialog.getWindow().setAttributes(wmlp);
gypsicoderの答えでwmlpの値を変更した後、またはwmlpの設定が私のテストで有効になりません。
これらの回答はAlertDialogの位置を移動しますが、表示されるダイアログの位置には、ダイアログの周囲のパディングも含まれます。
このパディングを削除する場合(たとえば、ダイアログを画面の下部に配置する場合)、styles.xmlのデフォルトのAlertDialogスタイルをオーバーライドして、windowBackgroundをnullに設定する必要もあります。 :
<resources>
<!-- Example app theme - mine uses the below -->
<style name="AppTheme" parent="Theme.AppCompat.Light.NoActionBar">
<item name="Android:alertDialogTheme">@style/MyDialogTheme</item>
</style>
<style name="MyDialogTheme" parent="Theme.AppCompat.Light.Dialog.Alert">
<!-- Full width -->
<item name="Android:layout_width">fill_parent</item>
<!-- Null window background kills surrounding padding -->
<item name="Android:windowBackground">@null</item>
<item name="Android:windowNoTitle">true</item>
</style>
</resources>
受け入れられた回答で説明されているようにWindow.LayoutParametersを設定します。
@ -David Cauntへの特別な叫び。その答えは Dialogからの境界線の削除、パディング です。