付费节点推荐
免费节点
节点使用教程
最近在做一个分享界面,效果如下。
因为在很多地方都需要用到这个分享的功能,所以我想,把这个功能用一个自定义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的样式。
<style name="Theme.Dialog">
<item name="windowFrame">@null</item>
<item name="windowTitleStyle">@style/DialogWindowTitle</item>
<item name="windowBackground">@drawable/panel_background</item>
<item name="windowIsFloating">true</item>
<item name="windowContentOverlay">@null</item>
<item name="windowAnimationStyle">@style/Animation.Dialog</item>
<item name="windowSoftInputMode">stateUnspecified|adjustPan</item>
<item name="windowCloseOnTouchOutside">@bool/config_closeDialogWhenTouchOutside</item>
<item name="windowActionModeOverlay">true</item>
<item name="colorBackgroundCacheHint">@null</item>
<item name="textAppearance">@style/TextAppearance</item>
<item name="textAppearanceInverse">@style/TextAppearance.Inverse</item>
<item name="textColorPrimary">@color/primary_text_dark</item>
<item name="textColorSecondary">@color/secondary_text_dark</item>
<item name="textColorTertiary">@color/tertiary_text_dark</item>
<item name="textColorPrimaryInverse">@color/primary_text_light</item>
<item name="textColorSecondaryInverse">@color/secondary_text_light</item>
<item name="textColorTertiaryInverse">@color/tertiary_text_light</item>
<item name="textColorPrimaryDisableOnly">@color/primary_text_dark_disable_only</item>
<item name="textColorPrimaryInverseDisableOnly">@color/primary_text_light_disable_only</item>
<item name="textColorPrimaryNoDisable">@color/primary_text_dark_nodisable</item>
<item name="textColorSecondaryNoDisable">@color/secondary_text_dark_nodisable</item>
<item name="textColorPrimaryInverseNoDisable">@color/primary_text_light_nodisable</item>
<item name="textColorSecondaryInverseNoDisable">@color/secondary_text_light_nodisable</item>
<item name="textColorHint">@color/hint_foreground_dark</item>
<item name="textColorHintInverse">@color/hint_foreground_light</item>
<item name="textColorSearchUrl">@color/search_url_text</item>
<item name="textAppearanceLarge">@style/TextAppearance.Large</item>
<item name="textAppearanceMedium">@style/TextAppearance.Medium</item>
<item name="textAppearanceSmall">@style/TextAppearance.Small</item>
<item name="textAppearanceLargeInverse">@style/TextAppearance.Large.Inverse</item>
<item name="textAppearanceMediumInverse">@style/TextAppearance.Medium.Inverse</item>
<item name="textAppearanceSmallInverse">@style/TextAppearance.Small.Inverse</item>
<item name="listPreferredItemPaddingLeft">10dip</item>
<item name="listPreferredItemPaddingRight">10dip</item>
<item name="listPreferredItemPaddingStart">10dip</item>
<item name="listPreferredItemPaddingEnd">10dip</item>
<item name="preferencePanelStyle">@style/PreferencePanel.Dialog</item>
</style>
此时,问题就一目了然了。
解决方案
我发现很多人都遇到了相同的问题,当然也有相应的解决方案。为了不重复的制造轮子,在此引入一个连接。
解决方案
经过测试,该问中的解决方案还是很全面的。我采用了最后一种解决方式。设置Dialog的conentView的最小宽度属性。部分代码如下:
mContainerView = getLayoutInflater().inflate(R.layout.widget_yuedudialog, null);
mContainerView.setMinimumWidth(10000);
mDialog.setContentView(mContainerView);
至此,问题已经解决。但是为何可以这样解决,我还没有整理清楚。等有时间我会继续跟踪这个问题的。希望此篇文章能帮到大家一些什么。
文/微行丶简(简书作者)
原文链接:http://www.jianshu.com/p/a3e8580f9683
著作权归作者所有,转载请联系作者获得授权,并标注“简书作者”。
原文链接:http://www.jianshu.com/p/a3e8580f9683
著作权归作者所有,转载请联系作者获得授权,并标注“简书作者”。
未经允许不得转载:Bcoder资源网 » Android的dialog不能横向铺满全屏问题
评论前必须登录!
登陆 注册