Dialog 外部透明背景与宽高固定
2019-06-28 本文已影响0人
lipyhui
一、说明
笔记主要是记录一些本人在开发当中的学习和使用笔记。笔记内容包含一些本人觉得重要的知识点、本人易犯的错误等。
由于本人水平有限,其中出现的错误或者不合理的地方望各位读者多多包含,并指出其中不合理和错误的地方,以便我来修改正。谢谢!
二、笔记时间
2019年06月28日
三、简述
本文主要记录如何设置 Dialog宽高;还有Dialog透明问题。
四、详情
1、Dialog 外部透明背景
当我们设置 AlertDialog windowBackground 透明时,发现透明是没问题,但是边框阴影怎么也去不掉。于是我想把 AlertDialog 改成 Dialog,结果意外还是出现了,用 Dialog 时果断边框阴影没有了。不管是为啥,反正问题是没有了,此处做一下记录,以免下次继续踩坑。代码如下:
<style name="NoBackGroundDialog" parent="@android:style/Theme.Holo.Light.Dialog">
<item name="android:windowBackground">@android:color/transparent</item>
<item name="android:windowNoTitle">true</item>
<item name="android:windowIsFloating">true</item>
<item name="android:backgroundDimEnabled">false</item>
</style>
public class AboutDialog extends Dialog {
protected AboutDialog(Context context, int theme) {
super(context, theme);
}
protected AboutDialog(Context context) {
super(context);
}
public static class Builder {
private Activity mContext;
private AboutDialog mAboutDialog;
public Builder(Activity context) {
if (null == context || context.isFinishing())
return;
}
@SuppressLint("Override")
public AboutDialog create() {
mAboutDialog = new AboutDialog(mContext, R.style.NoBackGroundDialog);
View view = LayoutInflater.from(mContext).inflate(R.layout.dialog_about, null);
mAboutDialog.setContentView(view);
mAboutDialog.setCancelable(false);
mAboutDialog.setCanceledOnTouchOutside(true);
mAboutDialog.show();
return mAboutDialog;
}
}
}
2、Dialog 固定宽高
在实际开发中,我发现另外一个问题,就是我们在布局里面设定死了宽高,可结果用 Dialog 展示时,这个设定的宽高没有任何作用。这里又两只处理方式:
- 给布局再包裹一层,把宽高设置到子布局里面。不过这样的问题是多了一层布局
- Java 代码中修改 Window 的 LayoutParams
把宽高设定到子布局里面,这个不用多说。下面主要说说 Java 修改 LayoutParams 的方式。不多说直接贴代码:
Window window = mAboutDialog.getWindow();
WindowManager.LayoutParams lp = window.getAttributes();
lp.width = (int) mContext.getResources().getDimension(R.dimen.about_width);
lp.height = RelativeLayout.LayoutParams.WRAP_CONTENT;
lp.y -= ContextCompat.getDrawable(mContext, R.drawable.icon_mascot_selected).getMinimumHeight();
window.setAttributes(lp);
代码中我们还给 LayoutParams 设置了 y 的值,这个目的是设置 Dialog 的显示位置,代码中是让 Diaolg 的显示位置向上偏移了一个图片的高度。
下面贴一下我 Dialog 的完整代码:
public class AboutDialog extends Dialog {
protected AboutDialog(Context context, int theme) {
super(context, theme);
}
protected AboutDialog(Context context) {
super(context);
}
public static class Builder {
private Activity mContext;
private AboutDialog mAboutDialog;
public Builder(Activity context) {
if (null == context || context.isFinishing())
return;
}
@SuppressLint("Override")
public AboutDialog create() {
mAboutDialog = new AboutDialog(mContext, R.style.NoBackGroundDialog);
View view = LayoutInflater.from(mContext).inflate(R.layout.dialog_about, null);
mAboutDialog.setContentView(view);
mAboutDialog.setCancelable(false);
mAboutDialog.setCanceledOnTouchOutside(true);
mAboutDialog.show();
Window window = mAboutDialog.getWindow();
WindowManager.LayoutParams lp = window.getAttributes();
lp.width = (int) mContext.getResources().getDimension(R.dimen.about_width);
lp.height = RelativeLayout.LayoutParams.WRAP_CONTENT;
lp.y -= ContextCompat.getDrawable(mContext, R.drawable.icon_mascot_selected).getMinimumHeight();
window.setAttributes(lp);
return mAboutDialog;
}
}
}