108

Android で AlertDialog を表示すると、画面の中央に表示されます。位置を変える方法はありますか?

4

4 に答える 4

265

さまざまな投稿を検索した後、解決策を見つけました。

コードは以下に掲載されています。

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 位置の値は下から上です。

于 2011-05-18T20:56:44.157 に答える
16

たとえば、進行状況ダイアログを少し下に移動し、正確なピクセル位置を設定したくない場合は、これで十分です。

progressDialog.getWindow().getAttributes().verticalMargin = 0.2F;
于 2012-08-09T12:49:00.220 に答える
8

設定を効果的にするために、次のコードを追加しました
dialog.getWindow().setAttributes(wmlp);

ジプシコーダーの回答でwmlpの値を変更した後、または私のテストではwmlpの設定が有効になりません。

于 2013-11-02T12:22:22.813 に答える
1

これらの回答は 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 への特別な叫び声で、その答えは次のとおりです。ダイアログからの境界線の削除、パディングがこの図を完成させました。

于 2015-12-10T15:21:50.517 に答える