2011-03-29 2 views

답변

219

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

아래 코드 배치되어

여기
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 픽셀 위치를 설정하려면

+1

사용자 지정 알림 대화 상자를 만들 수도 있습니다. 저는 최근에 이것을 한 다음 디스플레이 너비와 높이를 가져와 X 및 Y를 그 값의 백분율을 기준으로 설정해야합니다. 그런 식으로 레이아웃이 멋지게 확장되었습니다. http://developer.android.com/guide/topics/ui/dialogs.html#CustomDialog – Roloc

+15

작동하지만 이것을 추가해야합니다 : WMLP.gravity = Gravity.TOP | 중력 .LEFT; 그렇지 않은 경우 x 및 y 값은 화면 가운데에서의 오프셋으로 사용됩니다. – BoD

+1

경험을 공유하기 만하면 : 위의 코드는 대화 상자가 화면에 완전히 머무를 수있는 경우에만 작동합니다. 예를 들어 새로운 y 좌표가 너무 크면 대화 상자가 전체 대화 상자를 표시하는 화면의 가장 낮은 위치로 이동합니다. 여기서 까다로운 부분은 레이아웃 매개 변수의 x와 y 값이 더 이상 대화 상자 창의 왼쪽 위 모서리의 좌표를 더 이상 나타내지 않아서 예를 들어 창의 상대 이동을 계산하는 데 사용할 수 없다는 것입니다. MotionEvent에 반응합니다. – Nantoka

12

이,이 충분 :

progressDialog.getWindow().getAttributes().verticalMargin = 0.2F; 
5

이 설정이 정보 효과를 제공하기 위해, 나는 다음을 추가 변경 후 코드
dialog.getWindow().setAttributes(wmlp);

gypsicoder의 대답 wmlp의 값, 또는 wmlp의 설정은 내 테스트에 의한 효과를 고려하지 않습니다.

0

이러한 대답은 AlertDialog의 위치를 ​​이동하지만 표시되는 대화 상자의 위치에는 대화 상자 주변의 패딩이 포함됩니다.

이 패딩을 제거하려면 (예를 들어, 대화 상자를 화면 아래쪽에 배치하려면) stylesBack.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에게 특별한 외침 : remove border, padding from Dialog 님이이 그림을 완성했습니다.