Câu hỏi Thay đổi vị trí của Hộp thoại trên màn hình android


Tôi đã thực hiện một đơn giản AlertDialog trong tôi Hoạt động:

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, hộp thoại hiển thị tại (về) 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í hộp thoại để làm cho nó hiển thị ngay dưới thanh hành động 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 ??


76
2018-02-27 14:52


gốc


Nếu bạn cho chúng tôi thấy bố cục xml my_dialog của mình, chúng tôi có thể giúp bạn thực hiện các thay đổi. - Alan Moore
bản sao?stackoverflow.com/questions/5469005/… - Samir Mangroliya
@ Ankit, bạn có thể đặt bình luận của bạn như là một câu trả lời, bởi 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. - Leem.fin


Các câu trả lời:


Tôi đã sử dụng mã này để hiển thị hộp thoại ở cuối 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


176
2018-02-27 14:59



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? - Leem.fin
Bạn có thể thử sử dụng wlp.x và wlp.y các trường để đặ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. - Aleks G
Có, wlp.x và wlp.y ​​đang hoạt động. - Leem.fin
Thanh toán bù trừ của mờ đã không làm việc cho tôi (mặc dù phần còn lại làm việc như một say mê). Tôi tìm thấy một giải pháp để làm mờ ở một vị trí khác, dưới dạng: window.clearFlags (WindowManager.LayoutParams.FLAG_DIM_BEHIND); - Rubberduck
@ AleksG là có một cách để cũng thay đổi màu sắc của nền mờ giữ dailog ở trung tâm? Tôi đã thử thiết lập windowIsFloating = false thành dailog style. Nhưng nó xếp dailog lên hàng đầu! - Kshitij


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 chỉnh hộp thoại của bạn dựa trên các thông số về trọng lực và bố cục thay đổi trọng lực và thông số bố cục trên cơ sở yêu cầu của bạn


21
2018-02-27 14:57



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? - Leem.fin
bạn có thể đặt lề trên của bố cục - Ramesh Solanki
'FILL_PARENT' không được chấp nhận. Tôi đang ở API 21. Theo Tham chiếu nhà phát triển - fWd82
@ fWd82 vì vậy hãy sử dụng 'MATCH_PARENT' để thay thế - William


Đối với tôi, điều này làm việc khá tốt, nơi tôi đã cố gắng để vị trí hộp thoại của tôi một nơi nào đó chính xác ở dưới cùng của textview nơi nó được chọ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);
}

8
2018-06-30 10:57





Tôi đã tìm thấy đoạn mã này từ mã @gypsicoder đâ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à các pixel từ trái sang phải. Đối với giá trị vị trí y là từ dưới lên trên.


6
2018-06-11 23:00





Mới BottomSheetDialog:

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

dialog.show();

4
2017-08-02 14:21





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

dialog.getWindow().setGravity(Gravity.BOTTOM);

3
2017-10-16 07:00





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

1
2017-07-04 06:31