AlertDialog 背景透明

简介: AlertDialog 背景透明
AlertDialog alertDialog;
    void showMagicDialog(int id){
        AlertDialog.Builder builder = new AlertDialog.Builder(this, R.style.magicDialog);
        builder.setView(R.layout.dialog_layout);
        alertDialog = builder.create();
        alertDialog.show();
        Window w = alertDialog.getWindow();
        Drawable bgDrawable = new ColorDrawable(0x00000000);
//找到主布局控件, 并修改它的背景       
w.getDecorView().findViewById(getIdFromInternalR("customPanel")).setBackground(bgDrawable);
       //窗体背景修改为透明
        w.setBackgroundDrawable(bgDrawable);
    }


关于getIdFromInternalR("customPanel")


方法在下面.


 

public static int getIdFromInternalR(String idName){
        try {
            Class clasz = Class.forName("com.android.internal.R$id");
            Field field = clasz.getDeclaredField(idName);
            field.setAccessible(true);
            int id= (int)field.get(null);
            return id;
        } catch (ClassNotFoundException e) {
            e.printStackTrace();
        } catch (IllegalAccessException e) {
            e.printStackTrace();
        } catch (NoSuchFieldException e) {
            e.printStackTrace();
        }
        return 0;
    }



如网上说的许多方法, 会调用getWindow().getDecorView().....然后修改背景


但不管用,


后面直接通过


ViewGroup vg = (ViewGroup)getDecorView();
for(int i = 0; i < vg.getChildCount(); i++)


找到ViewGroup则继续往下遍历, 每一个View都setBackgroundDrawable....


最终找到生效的是id/customPanel 和Window本身的background.


详细看源码中的PhoneWindow.java


   PS: 仅在 RK 和 全志 , android4.2, 4.4上面测试通过!!!!


------------ GOOD LUCK ------------------


相关文章
|
Android开发
解决圆形进度条ProgressBar的几个问题
Android自带的Progressbar默认就是圆形的,可以通过设置style属性 style="?android:attr/progressBarStyleHorizontal" 复制代码 这样就能变成条状进度条,如下: <ProgressBar android:layout_width="match_parent" android:layout_height="wrap_content" style="?android:attr/progressBarStyleHorizontal"/>
1240 0
|
API Android开发 容器
PopupWindow
PopupWindow
140 0
Dialog和DialogFragment 设置背景透明
Dialog和DialogFragment 设置背景透明
1014 0
|
Android开发
Android弹窗二则: PopupWindow和AlertDialog
前言 弹窗是图形界面必备的一个模块, 回忆一下windows那些恶心爆了的错误弹窗吧, 把弹窗制作的更高效友好一点是非常必要的. 这里说两个常用的弹窗类, PopupWindow和AlertDialog.
1153 0
|
XML Android开发 数据格式
ActionBar的使用
前言 山水一程,三生有幸。 启用ActionBar ActionBar需要在Android3.0以上的版本才能启用。如果希望关闭ActionBar,则可以设置该应用的主题为Xxxx.NoActionBar,配置如下。
996 0