设置自定义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));
开发者涨薪指南
48位大咖的思考法则、工作方式、逻辑体系
以上是关于设置自定义dialog的正确宽高的主要内容,如果未能解决你的问题,请参考以下文章
[Android] 自定义 Dialog 布局设置固定宽高无效