AlertDialog 背景透明

来源:互联网 发布:java调用 webservice 编辑:程序博客网 时间:2024/05/18 23:54
 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 ------------------

 

 

 

 

 

0 0
原创粉丝点击