AlertDialog를 안드로이드에 표시하면 화면 중앙에 표시됩니다. 위치를 바꿀 수있는 방법이 있습니까?화면의 어떤 위치에 AlertDialog 표시
101
A
답변
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 픽셀 위치를 설정하려면
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 님이이 그림을 완성했습니다.
사용자 지정 알림 대화 상자를 만들 수도 있습니다. 저는 최근에 이것을 한 다음 디스플레이 너비와 높이를 가져와 X 및 Y를 그 값의 백분율을 기준으로 설정해야합니다. 그런 식으로 레이아웃이 멋지게 확장되었습니다. http://developer.android.com/guide/topics/ui/dialogs.html#CustomDialog – Roloc
작동하지만 이것을 추가해야합니다 : WMLP.gravity = Gravity.TOP | 중력 .LEFT; 그렇지 않은 경우 x 및 y 값은 화면 가운데에서의 오프셋으로 사용됩니다. – BoD
경험을 공유하기 만하면 : 위의 코드는 대화 상자가 화면에 완전히 머무를 수있는 경우에만 작동합니다. 예를 들어 새로운 y 좌표가 너무 크면 대화 상자가 전체 대화 상자를 표시하는 화면의 가장 낮은 위치로 이동합니다. 여기서 까다로운 부분은 레이아웃 매개 변수의 x와 y 값이 더 이상 대화 상자 창의 왼쪽 위 모서리의 좌표를 더 이상 나타내지 않아서 예를 들어 창의 상대 이동을 계산하는 데 사용할 수 없다는 것입니다. MotionEvent에 반응합니다. – Nantoka