转-去除自定义alertdialog(dialog)黑边

 

http://blog.csdn.net/yu75567218/article/details/41912487

 

去除自定义alertdialog(dialog)黑边

 131人阅读 评论(0) 收藏 举报

在主窗体中显示自定义的dialog。方法一和方法二的共同代码:

  1. private static AlertDialog mAlertDialog;
  2. AlertDialog.Builder builder = new AlertDialog.Builder(new ContextThemeWrapper(context, R.style.theme_dialog));
  1. View dialogView = getView(context, R.layout.dialog_view);

方式一:

  1. builder.setView(dialogView);
  2. mAlertDialog = builder.create();
  3. mAlertDialog.show();

效果如下:

可以看到上下有明显的黑边。

方式二:

  1. mAlertDialog = builder.create();
  2. mAlertDialog.setView(dialogView, 0000);
  3. mAlertDialog.show();

效果如下:

通过设置

  1. mAlertDialog.setView(dialogView, 0000);

可以看到上下明显的黑边不在了,但是四周仍然有个黑框,依然影响整体美观。

方式三:

通过样式文件把背景设置为透明:

java代码如下:

  1. private static AlertDialog mAlertDialog;
  1. //使用样式文件把背景设置为透明
  2. AlertDialog.Builder builder = new AlertDialog.Builder(
  3.                 new ContextThemeWrapper(context, R.style.Theme_Transparent));
  4. View dialogView = getView(context, R.layout.dialog_view);
  5. // 为dialog设置view
  6. builder.setView(dialogView);
  7. mAlertDialog = builder.create();
  8. mAlertDialog.show();

样式文件res/values/styles.xml代码如下:

  1. <?xml version=“1.0” encoding=“utf-8”?>
  2. <resources xmlns:android=“http://schemas.android.com/apk/res/android”>
  3.     <style name=“Theme_Transparent” parent=“@android:Theme.DeviceDefault.Light.Dialog”>
  4.         <item name=“android:windowIsTranslucent”>true</item>
  5.         <item name=“android:windowBackground”>@android:color/transparent</item>
  6.         <item name=“android:windowContentOverlay”>@null</item>
  7.         <item name=“android:windowNoTitle”>true</item>
  8.     </style>
  9. </resources>

效果如下:

方式四:

把弹出窗体由alertdialog改成dialog。

  1. View dialogView = getView(context, R.layout.dialog_view);
  2. Dialog mAlertDialog = new Dialog(context, R.style.theme_dialog);
  3. mAlertDialog.setContentView(dialogView);
  1. mAlertDialog.show();

样式style文件为:

  1. <?xml version=“1.0” encoding=“utf-8”?>
  2. <resources>
  3.     <style name=“theme_dialog” parent=“@android:style/Theme.Dialog”>
  4.         <item name=“android:windowFrame”>@null</item>
  5.         <item name=“android:windowIsFloating”>true</item>
  6.         <item name=“android:windowIsTranslucent”>false</item>
  7.         <item name=“android:windowNoTitle”>true</item>
  8.         <item name=“android:background”>@android:color/black</item>
  9.         <item name=“android:windowBackground”>@null</item>
  10.         <item name=“android:backgroundDimEnabled”>false</item>
  11.     </style>
  12. </resources>

最终效果如下:
使用dialog解决了黑边问题,但是dialog的布局我们并不是很满意,下一篇我将介绍设置自定义窗体的大小和位置。

 

http://blog.csdn.net/yu75567218/article/details/41923347

不设置dialog窗体的位置和大小:

  1. View dialogView = getView(context, R.layout.dialog_view);
  2. final Dialog mAlertDialog = new Dialog(context, R.style.theme_dialog);
  3. mAlertDialog.setContentView(dialogView);
  4. mAlertDialog.show();

效果如下:

通过获取屏幕的像素,按比例设置弹出dialog窗体的大小和位置:

  1. View dialogView = getView(context, R.layout.dialog_view);
  2. final Dialog mAlertDialog = new Dialog(context, R.style.theme_dialog);
  3. mAlertDialog.setContentView(dialogView);
  4. //获取屏幕宽高
  5. WindowManager wm = (WindowManager) context
  6.     .getSystemService(Context.WINDOW_SERVICE);
  7. Display display = wm.getDefaultDisplay();
  8. int width =display.getWidth();
  9. int height=display.getHeight();
  10. Window dialogWindow = mAlertDialog.getWindow();
  11. WindowManager.LayoutParams lp = dialogWindow.getAttributes();
  12. dialogWindow.setGravity(Gravity.LEFT | Gravity.TOP);
  13. //lp.x与lp.y表示相对于原始位置的偏移.
  14. //将对话框的大小按屏幕大小的百分比设置
  15. lp.x = (int) (width*0.05); // 新位置X坐标
  16. lp.y = (int) (height*0.2); // 新位置Y坐标
  17. lp.width = (int) (width*0.9); // 宽度
  18. lp.height = (int) (height*0.6); // 高度
  19. dialogWindow.setAttributes(lp);
  20. mAlertDialog.show();

最终效果如下:

版权声明:本文为博主原创文章,未经博主允许不得转载。