Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/233.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/301.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 如何设置对话框的最大高度?_Android_Android Alertdialog - Fatal编程技术网

Android 如何设置对话框的最大高度?

Android 如何设置对话框的最大高度?,android,android-alertdialog,Android,Android Alertdialog,我想设置对话框的最大高度。不是像dp或px设置的自定义高度。我想设置最大可能的高度,以相对当前设备屏幕大小 DisplayMetrics displaymetrics = new DisplayMetrics(); getActivity().getWindowManager().getDefaultDisplay() .getMetrics(displaymetrics); int width = (int) (displaymetrics.widthPixels); int height

我想设置对话框的最大高度。不是像dp或px设置的自定义高度。我想设置最大可能的高度,以相对当前设备屏幕大小

DisplayMetrics displaymetrics = new DisplayMetrics();

getActivity().getWindowManager().getDefaultDisplay()
.getMetrics(displaymetrics);
int width = (int) (displaymetrics.widthPixels);
int height = (int) (displaymetrics.heightPixels);
d.getWindow().setLayout(width,height);
d.show();
其中d是对话框。此代码将对话框设置为全屏

Dialog dialog = new Dialog(context);
dialog.requestWindowFeature(Window.FEATURE_NO_TITLE);
dialog.setContentView(R.layout.dialog_example);
WindowManager.LayoutParams lp = new WindowManager.LayoutParams();
lp.copyFrom(dialog.getWindow().getAttributes());
lp.width = WindowManager.LayoutParams.WRAP_CONTENT;
lp.height = WindowManager.LayoutParams.MATCH_PARENT;
//lp.height = (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, 330/*height value*/, getResources().getDisplayMetrics()); for custom height value
dialog.getWindow().setAttributes(lp);
dialog.show();

我认为这可以解决它。我添加了两种方法,一种用于使用match parent属性设置对话框高度,另一种用于使用自定义值设置高度。您不能直接设置最大高度。如果高度大于要设置的最大高度,则可以将高度重置为备用高度

WindowManager.LayoutParams lp = new WindowManager.LayoutParams();
lp.copyFrom(dialog.getWindow().getAttributes());
int dialogWidth = lp.width;
int dialogHeight = lp.height;

if(dialogHeight > MAX_HEIGHT) {
   d.getWindow().setLayout(dialogWidth,MAX_HEIGHT);
} 

可能是addOnLayoutChangeListener()对您有用

您可以在dialog.show()之前或之后添加它

这是我的代码:

AlertDialog.Builder builder = new AlertDialog.Builder(this);
    final View view = LayoutInflater.from(this).inflate(R.layout.custom_alertdialog, null);
    builder.setMessage("TestMessage xxxxxxx");
    builder.setPositiveButton("ok", new DialogInterface.OnClickListener() {
        @Override
        public void onClick(DialogInterface dialog, int which) {
        }
    });

    builder.setView(view);  //在setView之前调用builder的原有设置控件方法时,能展示设置的控件,之后设置的则不展示!!
    AlertDialog dialog = builder.create();
    dialog.getWindow().setBackgroundDrawable(getResources().getDrawable(R.drawable.shape_bk_cnoneralert));
    //builder.show();   //用这个的话,背景并不会改变,依旧是默认的

    dialog.show();  //必须用这个show 才能显示自定义的dialog window 的背景

    //这种设置宽高的方式也是好使的!!!-- show 前调用,show 后调用都可以!!!
    view.addOnLayoutChangeListener(new View.OnLayoutChangeListener() {
        @Override
        public void onLayoutChange(View v, int left, int top, int right, int bottom, int oldLeft, int oldTop,
                                   int oldRight, int oldBottom) {
            int height = v.getHeight();
            int contentHeight = view.getHeight();

            LogUtils.e("高度", height + " / " + " / " + contentHeight);
            int needHeight = 500;

            if (contentHeight > needHeight) {
                //注意:这里的 LayoutParams 必须是 FrameLayout的!!
                //NOTICE : must be FrameLayout.LayoutParams 
                view.setLayoutParams(new FrameLayout.LayoutParams(FrameLayout.LayoutParams.MATCH_PARENT, 
                        needHeight));
            }
        }
    });

例如高度:100%?如果您希望它是固定的,那么您应该设置一个dp,因为它基于屏幕的物理大小。Noooo。默认对话框的最大高度。使对话框高度不等于屏幕高度,但使其成为默认对话框高度的最大值默认对话框高度取决于为其输入的文本。你的要求是什么?我想设置对话框的固定高度这是设置对话框最大高度的正确答案。谢谢@antoniomerlin