Khi chúng tôi hiển thị một AlertDialog trong Android, nó sẽ hiển thị ở giữa màn hình. Có cách nào để thay đổi vị trí?
Khi chúng tôi hiển thị một AlertDialog trong Android, nó sẽ hiển thị ở giữa màn hình. Có cách nào để thay đổi vị trí?
Câu trả lời:
Sau khi tìm kiếm trong các bài viết khác nhau, tôi đã tìm ra giải pháp.
Mã được đăng dưới đây:
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();
Ở đây giá trị của vị trí x là pixel từ trái sang phải. Đối với giá trị vị trí y là từ dưới lên trên.
wmlp.x = 100; //x position wmlp.y = 100;
bạn chỉ cần thiết lập lực hấp dẫn wmlp.gravity = Gravity.TOP | Gravity.LEFT;
là đủ
Ví dụ: nếu bạn muốn di chuyển biểu đồ tiến trình xuống sâu hơn một chút và không đặt vị trí pixel exakt, thì điều này là đủ:
progressDialog.getWindow().getAttributes().verticalMargin = 0.2F;
Những câu trả lời này sẽ di chuyển vị trí của AlertDialog, tuy nhiên, vị trí của hộp thoại được hiển thị cũng sẽ bao gồm phần đệm xung quanh hộp thoại.
Nếu bạn muốn loại bỏ phần đệm này (ví dụ: để hộp thoại của bạn nằm ngang với cuối màn hình), bạn cũng sẽ cần ghi đè kiểu AlertDialog mặc định trong styles.xml của mình để đặt windowBackground thành null, như vậy :
<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>
Cũng như thiết lập Window.LayoutParameters như được mô tả trong câu trả lời được chấp nhận.
Đặc biệt gửi lời cảm ơn tới @David Caunt có câu trả lời tại: xóa đường viền, phần đệm khỏi Hộp thoại đã hoàn thành bức ảnh này.