设置自定义dialog的正确宽高

Posted -SOLO-

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了设置自定义dialog的正确宽高相关的知识,希望对你有一定的参考价值。

对于自定义dialog。要获取其宽高最好的办法是通过DecorView,因为Activity的DecorView的宽高就是屏幕的宽高。而通过DecorView来测试宽高。会考虑到layout_width和layout_height。这个两个属性的影响。

如果直接通过

view.measure(0,0);

这种方法。测量的大小是其子控件的大小。没办法考虑到屏幕的大小。相对比较麻烦。
因此推荐以下这种。

记住inflate的第三个参数为false。因为我们只需layoutParams不需要真的添加到DecorView上去。

  View view = inflater.inflate(R.layout.layout_dialog, (ViewGroup) getActivity().getWindow().getDecorView(), false);
  //获取大小
  measuredWidth = view.getLayoutParams().width;
  measuredHeight = view.getLayoutParams().height;

以下是途径的一种方式。设置dialog的大小必须通过设置其window的Attributes来实现。而最好的时机就是onViewCreate

为了去除干扰必须设置以下
padding的设置必须在backgroud之后

   getDialog().getWindow().getDecorView().setBackground(new ColorDrawable(Color.BLUE));
   getDialog().getWindow().getDecorView().setPadding(0,0,0,0);
public class MyFragment extends DialogFragment 

    private int measuredWidth;
    private int measuredHeight;

    @Nullable
    @Override
    public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) 

        View view = inflater.inflate(R.layout.layout_dialog, (ViewGroup) getActivity().getWindow().getDecorView(), false);
        measuredWidth = view.getLayoutParams().width;
        measuredHeight = view.getLayoutParams().height;
        return view;
    

    @Override
    public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) 
        super.onViewCreated(view, savedInstanceState);
        if (getDialog() != null) 
            WindowManager.LayoutParams attributes = getDialog().getWindow().getAttributes();
            attributes.width = measuredWidth;
            attributes.height = measuredHeight;
            attributes.windowAnimations=R.style.dialogWindowAnim;
            attributes.gravity= Gravity.TOP|Gravity.START;
            getDialog().getWindow().setAttributes(attributes);
            getDialog().getWindow().getDecorView().setPadding(0,0,0,0);
            getDialog().getWindow().getDecorView().setBackground(new ColorDrawable(Color.RED));
            
        
    

以上是关于设置自定义dialog的正确宽高的主要内容,如果未能解决你的问题,请参考以下文章

设置自定义dialog的正确宽高

[Android] 自定义 Dialog 布局设置固定宽高无效

vue+elementUi自定义dialog对话框多个组件实例动态设置宽高getElementsByClassName

Android 自定义AlertDialog--备忘

Android自定义View之实现流式布局

Android自定义View之实现流式布局