如何获得对话框大小?

sle*_*dav 11 java android dialog android-dialog

我正在寻找一种方法来获得自定义对话框的大小.我经历了这个问题,但是给出的唯一答案是没用的,因为如果我尝试mDialog.getWindow().getAttributes().height;它只返回-2,这是WRAP_CONTENT我设置为对话的属性的常量.我怎样才能得到它的大小.我想知道背景图像的siye.

Kor*_*oly 20

试试看:

mDialog.getWindow().getDecorView().getHeight() 
Run Code Online (Sandbox Code Playgroud)

  • @KorniltsevAnatoly:这对我不起作用.我得到0. (10认同)

Mic*_*hal 12

实际上,在Android中它不像在iOS中那样工作 - 你无法获得View自身的大小,但你可以做的是要求查看该视图的ROOT布局的大小.

例如:

myDialog.this.findViewById(R.id.dialog_root_layout).getHeight());

  • 虽然它返回没有标题的对话框的大小,但这正是我所需要的。 (2认同)

Cod*_*ife 6

@Kormilsev Anatoliy回答正确,我正在改善。因此,在您从Dialog类继承的类中,只需重写该方法即可:

@Override
public void onWindowFocusChanged (boolean hasFocus) {
    super.onWindowFocusChanged(hasFocus);
    height = getWindow().getDecorView().getHeight();
}
Run Code Online (Sandbox Code Playgroud)

  • 这个`alertDialog.setOnShowListener(new DialogInterface.OnShowListener()`将起作用 (2认同)

小智 5

以防万一,如果您有自己的自定义对话框 XML 布局。

<?xml version="1.0" encoding="utf-8"?>
<android.support.constraint.ConstraintLayout 
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:id="@+id/dialog_main_layout"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_gravity="center_horizontal"
    android:background="@color/primaryBackground">

    /* whatever you want here */

</android.support.constraint.ConstraintLayout>
Run Code Online (Sandbox Code Playgroud)

活动中:

    final Dialog dialog = new Dialog(this);
    dialog.setContentView(R.layout.popup_gameover);

    dialog.setOnShowListener(new DialogInterface.OnShowListener() {
        @Override
        public void onShow(DialogInterface d) {
            View view = dialog.findViewById(R.id.dialog_main_layout);
            int width = view.getWidth();
            int height = view.getHeight();

            ...
        }
    });
Run Code Online (Sandbox Code Playgroud)

widthheight预想的完全一样。