เมื่อเราแสดง AlertDialog ใน Android มันจะแสดงตรงกลางหน้าจอ มีวิธีใดในการเปลี่ยนตำแหน่งหรือไม่?
เมื่อเราแสดง AlertDialog ใน Android มันจะแสดงตรงกลางหน้าจอ มีวิธีใดในการเปลี่ยนตำแหน่งหรือไม่?
คำตอบ:
หลังจากค้นหาในโพสต์ต่างๆฉันพบวิธีแก้ปัญหา
รหัสโพสต์ด้านล่าง:
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 คือจากล่างขึ้นบน
wmlp.x = 100; //x position wmlp.y = 100;
เพียงแค่ตั้งแรงโน้มถ่วงwmlp.gravity = Gravity.TOP | Gravity.LEFT;
ก็เพียงพอแล้ว
ตัวอย่างเช่นหากคุณต้องการเลื่อน progressdialog ลงไปอีกเล็กน้อยและไม่ได้ตั้งค่าตำแหน่ง exakt pixel ก็เพียงพอแล้ว:
progressDialog.getWindow().getAttributes().verticalMargin = 0.2F;
เพื่อให้การตั้งค่ามีผลกับข้อมูลฉันได้เพิ่มรหัสต่อไปนี้
dialog.getWindow().setAttributes(wmlp);
หลังจากเปลี่ยนค่าของ wmlp ในคำตอบของยิปซิโคเดอร์หรือการตั้งค่า wmlp ไม่มีผลกับการทดสอบของฉัน
คำตอบเหล่านี้จะย้ายตำแหน่งของ AlertDialog อย่างไรก็ตามตำแหน่งของกล่องโต้ตอบที่แสดงจะรวมถึงช่องว่างรอบ ๆ กล่องโต้ตอบด้วย
หากคุณต้องการกำจัดช่องว่างภายในนี้ (ตัวอย่างเช่นเมื่อต้องการวางกล่องโต้ตอบของคุณไว้ที่ด้านล่างของหน้าจอ) คุณจะต้องแทนที่สไตล์ AlertDialog เริ่มต้นใน styles.xml ของคุณเพื่อตั้งค่า 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 ซึ่งมีคำตอบที่: ลบเส้นขอบช่องว่างจากกล่องโต้ตอบเสร็จสิ้นภาพนี้