Android的dialog不能横向铺满全屏问题

最近在做一个分享界面,效果如下。

Android的dialog不能横向铺满全屏问题_第1张图片
效果图.png

因为在很多地方都需要用到这个分享的功能,所以我想,把这个功能用一个自定义Dialog封装起来,并将分享的状态通过接口返回给调用者。功能实现比较简单,就不赘述了。此处主要为了写一下,在实现过程中遇到的坑:我发现即便将contentView的width属性设置成match_parent,当运行看效果时,也无法将Dialog横向铺满屏幕

问题原因

在纠结很久,排除布局文件的问题后。我发现Dialog是有默认样式的。这里贴出Dialog的构造方法以供参考。

Dialog(Context context, int theme, boolean createContextThemeWrapper) {
        if (createContextThemeWrapper) {
            if (theme == 0) {
                TypedValue outValue = new TypedValue();
                context.getTheme().resolveAttribute(com.android.internal.R.attr.dialogTheme,
                        outValue, true);
                theme = outValue.resourceId;
            }
            mContext = new ContextThemeWrapper(context, theme);
        } else {
            mContext = context;
        }

        mWindowManager = (WindowManager)context.getSystemService(Context.WINDOW_SERVICE);
        Window w = PolicyManager.makeNewWindow(mContext);
        mWindow = w;
        w.setCallback(this);
        w.setOnWindowDismissedCallback(this);
        w.setWindowManager(mWindowManager, null, null);
        w.setGravity(Gravity.CENTER);
        mListenersHandler = new ListenersHandler(this);
    }

我们发现,Dialog默认是实现Theme.Dialog样式的,那我们看一下Theme.Dialog的样式。


此时,问题就一目了然了。

解决方案

我发现很多人都遇到了相同的问题,当然也有相应的解决方案。为了不重复的制造轮子,在此引入一个连接。
解决方案

经过测试,该问中的解决方案还是很全面的。我采用了最后一种解决方式。设置Dialog的conentView的最小宽度属性。部分代码如下:

mContainerView = getLayoutInflater().inflate(R.layout.widget_yuedudialog, null);
mContainerView.setMinimumWidth(10000);
mDialog.setContentView(mContainerView);

至此,问题已经解决。但是为何可以这样解决,我还没有整理清楚。等有时间我会继续跟踪这个问题的。希望此篇文章能帮到大家一些什么。

你可能感兴趣的:(Android的dialog不能横向铺满全屏问题)