72

tôi đã thực hiện một cách đơn giản AlertDialog trong Hoạt động của tôi:Thay đổi vị trí của các Dialog trên màn hình android

View view = layoutInflater.inflate(R.layout.my_dialog, null); 
AlertDialog infoDialog = new AlertDialog.Builder(MyActivity.this) 
        .setView(view) 
        .create(); 

infoDialog.show(); 

Với mã trên, thoại show tại (khoảng) trung tâm của màn hình.

Tôi tự hỏi, làm thế nào tôi có thể tùy chỉnh vị trí của hộp thoại để làm cho nó hiển thị ngay dưới Thanh tác vụ hàng đầu? (Có anyway để thay đổi lực hấp dẫn hoặc một cái gì đó của hộp thoại?) Và làm thế nào để làm điều đó dựa trên mã của tôi ??

+0

Nếu bạn chỉ cho chúng ta bố trí xml my_dialog bạn, chúng tôi có lẽ có thể giúp bạn thực hiện thay đổi. –

+0

trùng lặp? Http: //stackoverflow.com/questions/5469005/show-alertdialog-in-any-position-of-the-screen –

+0

@ Ankit, bạn có thể đặt nhận xét của mình làm câu trả lời không, vì vấn đề của tôi được giải quyết sau khi kiểm tra liên kết của bạn. –

Trả lời

171

của bạn tôi đã sử dụng mã này để hiển thị hộp thoại ở dưới cùng của màn hình:

Dialog dlg = <code to create custom dialog>; 

Window window = dlg.getWindow(); 
WindowManager.LayoutParams wlp = window.getAttributes(); 

wlp.gravity = Gravity.BOTTOM; 
wlp.flags &= ~WindowManager.LayoutParams.FLAG_DIM_BEHIND; 
window.setAttributes(wlp); 

Mã này cũng ngăn Android làm mờ nền của hộp thoại, nếu bạn cần. Bạn có thể thay đổi tham số trọng lực để di chuyển hộp thoại về

+0

Xin chào, cảm ơn bạn. Tôi đặt trọng lực của nó lên trên, hộp thoại xuất hiện trên đầu màn hình, nhưng nó cũng bao phủ thanh tác vụ của tôi, tôi muốn hộp thoại ở trên đầu nhưng chỉ dưới thanh tác vụ ... làm thế nào để điều chỉnh điều này? –

+3

Bạn có thể thử sử dụng các trường 'wlp.x' và' wlp.y' để đặt rõ vị trí của hộp thoại trên màn hình. Tôi đã không thử nó bản thân mình, nhưng nó có lẽ nên làm việc. –

+0

Có, wlp.x và wlp.y ​​đang hoạt động. –

20
private void showPictureialog() { 
    final Dialog dialog = new Dialog(this, 
      android.R.style.Theme_Translucent_NoTitleBar); 

    // Setting dialogview 
    Window window = dialog.getWindow(); 
    window.setGravity(Gravity.CENTER); 

    window.setLayout(LayoutParams.FILL_PARENT, LayoutParams.FILL_PARENT); 
    dialog.setTitle(null); 
    dialog.setContentView(R.layout.selectpic_dialog); 
    dialog.setCancelable(true); 

    dialog.show(); 
} 

bạn có thể tùy bạn hộp thoại dựa trên trọng lực và bố trí các thông số thay đổi trọng lực và tham số bố trí trên cơ sở requirenment

+0

Xin chào, cảm ơn. Tôi đặt trọng lực của nó lên trên, hộp thoại xuất hiện trên đầu màn hình, nhưng nó cũng bao phủ thanh tác vụ của tôi, tôi muốn hộp thoại ở trên đầu nhưng chỉ dưới thanh tác vụ ... làm thế nào để điều chỉnh điều này? –

+2

bạn có thể đặt lề trên của bố cục –

+0

''FILL_PARENT'' không được chấp nhận. Tôi đang sử dụng API 21. Theo [Developer Reference] (https://developer.android.com/reference/android/view/ViewGroup.LayoutParams.html) – fWd82

7

Đối với tôi, điều này đã khá tốt khi tôi cố định vị trí hộp thoại ở đâu đó ở cuối chế độ xem văn bản.

public void setPosition(int yValue) { 
    Window window = getWindow(); 
    WindowManager.LayoutParams param = window.getAttributes(); 
    param.gravity = Gravity.TOP | Gravity.CENTER_HORIZONTAL; 
    param.y = yValue; 
    window.setAttributes(param); 
    window.clearFlags(WindowManager.LayoutParams.FLAG_DIM_BEHIND); 
} 
6

tôi thấy đoạn mã này từ mã @gypsicoder here

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ị x vị trí là điểm ảnh từ trái sang phải. Đối với giá trị vị trí y là từ dưới lên trên.

1
dialog.getWindow().getAttributes().gravity = Gravity.BOTTOM; 
3

New BottomSheetDialog:

BottomSheetDialog dialog = new BottomSheetDialog(YourActivity.this);  
dialog.setContentView(YourView); 

dialog.show(); 
2

chỉ thêm video này vào mã của bạn:

dialog.getWindow().setGravity(Gravity.BOTTOM); 
Các vấn đề liên quan