[android] 화면의 모든 위치에 AlertDialog 표시

Android에서 AlertDialog를 표시하면 화면 중앙에 표시됩니다. 위치를 변경할 방법이 있습니까?



답변

다양한 게시물을 검색 한 후 해결책을 찾았습니다.

코드는 아래에 게시되어 있습니다.

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 위치 값은 아래에서 위로입니다.


답변

예를 들어 진행률 대화 상자를 조금 더 아래로 이동하고 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를 설정합니다.

특별 소리 아웃 그의 대답에서 @ 데이비드 Caunt에 : 제거 테두리, 패딩 대화 상자에서 이 사진을 완료했다.


답변