android 如何让一个dialog的背景为透明
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了android 如何让一个dialog的背景为透明相关的知识,希望对你有一定的参考价值。
北京设置透明?你可以设置dialog的样式,通过Style 来设置;android Dialog背景全透明无边框 Theme Style
<style name="Translucent_NoTitle" parent="android:style/Theme.Dialog">
<item name="android:windowNoTitle">true</item>
<item name="android:background">#00000000</item>
<item name="android:windowBackground">@android:color/transparent</item>
<item name="android:colorBackgroundCacheHint">@null</item>
<item name="android:windowIsTranslucent">true</item>
</style> 参考技术A 设置stytle属性
<style name="dialog" parent="@android:style/Theme.Dialog">
<item name="android:windowFrame">@null</item>
<item name="android:windowIsFloating">true</item>
<item name="android:windowIsTranslucent">true</item>
<item name="android:windowNoTitle">true</item>
<item name="android:background">@android:color/transparent</item>
<item name="android:windowBackground">@android:color/transparent</item>
<item name="android:backgroundDimEnabled">true</item>
<item name="android:colorBackgroundCacheHint">@null</item>
<item name="android:windowContentOverlay">@null</item>
<item name="android:textSize">16sp</item>
</style>
,<item name="android:background">@android:color/transparent</item> 这就是背景透明。
然后在new dialog的时候选择有theme的那个构造方法,指定该stytle。 参考技术B 按如下步骤操作即可:
1、自定义Dialog
public class SelectDialog extends AlertDialog
public SelectDialog(Context context, int theme)
super(context, theme);
public SelectDialog(Context context)
super(context);
@Override
protected void onCreate(Bundle savedInstanceState)
super.onCreate(savedInstanceState);
setContentView(R.layout.slt_cnt_type);
2、布局文件slt_cnt_type.xml代码
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:padding="10dp" android:layout_width="115dp" android:layout_height="wrap_content" android:background="@color/blue">
<Button android:layout_height="wrap_content" android:background="#00000000" android:layout_width="fill_parent" android:text="全部联系人" android:paddingTop="5dp" android:paddingBottom="5dp" android:paddingLeft="10dp" android:gravity="left|center_vertical" android:id="@+id/btnSltCntAll"></Button>
<Button android:layout_height="wrap_content" android:background="#00000000" style="@drawable/greenhand_button" android:text="咕咚用户" android:gravity="left|center_vertical" android:paddingBottom="5dp" android:paddingTop="5dp" android:paddingLeft="10dp" android:paddingRight="10dp" android:layout_width="fill_parent" android:id="@+id/btnSltGudongUser"></Button>
<Button style="@drawable/greenhand_button" android:background="#00000000" android:layout_height="wrap_content" android:layout_width="fill_parent" android:text="推荐用户" android:gravity="left|center_vertical" android:paddingTop="5dp" android:paddingBottom="5dp" android:paddingLeft="10dp" android:id="@+id/btnSltRecommend"></Button>
</LinearLayout>
3、颜色color.xml代码
<?xml version="1.0" encoding="utf-8"?>
<resources>
<color name="transparent">#00000000</color>
</resources>
4、样式style.xml代码
<?xml version="1.0" encoding="utf-8"?>
<resources>
<style name="dialog" parent="@android:style/Theme.Dialog">
<item name="android:windowFrame">@null</item><!--边框-->
<item name="android:windowIsFloating">true</item><!--是否浮现在activity之上-->
<item name="android:windowIsTranslucent">false</item><!--半透明-->
<item name="android:windowNoTitle">true</item><!--无标题-->
<item name="android:windowBackground">@color/transparent</item><!--背景透明-->
<item name="android:backgroundDimEnabled">false</item><!--模糊-->
</style>
</resources>
4、显示Dialog
SelectDialog selectDialog = new SelectDialog(this,R.style.dialog);//创建Dialog并设置样式主题
Window win = selectDialog.getWindow();
LayoutParams params = new LayoutParams();
params.x = -80;//设置x坐标
params.y = -60;//设置y坐标
win.setAttributes(params);
selectDialog.setCanceledOnTouchOutside(true);//设置点击Dialog外部任意区域关闭Dialog
selectDialog.show(); 参考技术C 自定义Dialog样式
Android之Dialog半透明背景消失
近日,遇到一个Dialog半透明背景消失的问题,背景需求是自定义Dialog实现警告提示框:
// 初始化警告弹出框
alertDialog = new EmpAlertView(context, Utils.getIdByName(context, "style", "alert_style"));
alertDialog.setCanceledOnTouchOutside(false);
LayoutInflater inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
layout = inflater.inflate(Utils.getIdByName(context, "layout", "alertview"), null);
layout.setLayoutParams(new LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.WRAP_CONTENT));
// 设置半透明背景
Window window = alertDialog.getWindow();
WindowManager.LayoutParams lp = window.getAttributes();
lp.alpha = 0.9f;
window.setAttributes(lp);
alertDialog.setContentView(layout);
进行页面操作及用户提示,一切显示正常,如图:
当按下屏幕电源按钮,再次点亮屏幕,发现Dialog半透明的灰暗背景消失了.....
解决方法:设置window.addFlags(WindowManager.LayoutParams.FLAG_SHOW_WHEN_LOCKED);修改后如下:
// 初始化警告弹出框
alertDialog = new EmpAlertView(context, Utils.getIdByName(context, "style", "alert_style"));
alertDialog.setCanceledOnTouchOutside(false);
LayoutInflater inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
layout = inflater.inflate(Utils.getIdByName(context, "layout", "alertview"), null);
layout.setLayoutParams(new LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.WRAP_CONTENT));
Window window = alertDialog.getWindow();
WindowManager.LayoutParams lp = window.getAttributes();
lp.alpha = 0.9f;
window.setAttributes(lp);
// 防止按下再重新开启屏幕电源,原先变暗的背景变白色
window.addFlags(WindowManager.LayoutParams.FLAG_SHOW_WHEN_LOCKED);
alertDialog.setContentView(layout);
以上是关于android 如何让一个dialog的背景为透明的主要内容,如果未能解决你的问题,请参考以下文章
android 自己定义dialog并实现失去焦点(背景透明)的功能