http://blog.csdn.net/yu75567218/article/details/41912487
在主窗体中显示自定义的dialog。方法一和方法二的共同代码:
- private static AlertDialog mAlertDialog;
- AlertDialog.Builder builder = new AlertDialog.Builder(new ContextThemeWrapper(context, R.style.theme_dialog));
- View dialogView = getView(context, R.layout.dialog_view);
方式一:
- builder.setView(dialogView);
- mAlertDialog = builder.create();
- mAlertDialog.show();
效果如下:
可以看到上下有明显的黑边。
方式二:
- mAlertDialog = builder.create();
- mAlertDialog.setView(dialogView, 0, 0, 0, 0);
- mAlertDialog.show();
效果如下:
通过设置
- mAlertDialog.setView(dialogView, 0, 0, 0, 0);
可以看到上下明显的黑边不在了,但是四周仍然有个黑框,依然影响整体美观。
方式三:
通过样式文件把背景设置为透明:
java代码如下:
- private static AlertDialog mAlertDialog;
- //使用样式文件把背景设置为透明
- AlertDialog.Builder builder = new AlertDialog.Builder(
- new ContextThemeWrapper(context, R.style.Theme_Transparent));
- View dialogView = getView(context, R.layout.dialog_view);
- // 为dialog设置view
- builder.setView(dialogView);
- mAlertDialog = builder.create();
- mAlertDialog.show();
样式文件res/values/styles.xml代码如下:
- <?xml version=“1.0” encoding=“utf-8”?>
- <resources xmlns:android=“http://schemas.android.com/apk/res/android”>
- <style name=“Theme_Transparent” parent=“@android:Theme.DeviceDefault.Light.Dialog”>
- <item name=“android:windowIsTranslucent”>true</item>
- <item name=“android:windowBackground”>@android:color/transparent</item>
- <item name=“android:windowContentOverlay”>@null</item>
- <item name=“android:windowNoTitle”>true</item>
- </style>
- </resources>
效果如下:
方式四:
把弹出窗体由alertdialog改成dialog。
- View dialogView = getView(context, R.layout.dialog_view);
- Dialog mAlertDialog = new Dialog(context, R.style.theme_dialog);
- mAlertDialog.setContentView(dialogView);
- mAlertDialog.show();
样式style文件为:
- <?xml version=“1.0” encoding=“utf-8”?>
- <resources>
- <style name=“theme_dialog” parent=“@android:style/Theme.Dialog”>
- <item name=“android:windowFrame”>@null</item>
- <item name=“android:windowIsFloating”>true</item>
- <item name=“android:windowIsTranslucent”>false</item>
- <item name=“android:windowNoTitle”>true</item>
- <item name=“android:background”>@android:color/black</item>
- <item name=“android:windowBackground”>@null</item>
- <item name=“android:backgroundDimEnabled”>false</item>
- </style>
- </resources>
最终效果如下:
使用dialog解决了黑边问题,但是dialog的布局我们并不是很满意,下一篇我将介绍设置自定义窗体的大小和位置。
http://blog.csdn.net/yu75567218/article/details/41923347
不设置dialog窗体的位置和大小:
- View dialogView = getView(context, R.layout.dialog_view);
- final Dialog mAlertDialog = new Dialog(context, R.style.theme_dialog);
- mAlertDialog.setContentView(dialogView);
- mAlertDialog.show();
效果如下:
通过获取屏幕的像素,按比例设置弹出dialog窗体的大小和位置:
- View dialogView = getView(context, R.layout.dialog_view);
- final Dialog mAlertDialog = new Dialog(context, R.style.theme_dialog);
- mAlertDialog.setContentView(dialogView);
- //获取屏幕宽高
- WindowManager wm = (WindowManager) context
- .getSystemService(Context.WINDOW_SERVICE);
- Display display = wm.getDefaultDisplay();
- int width =display.getWidth();
- int height=display.getHeight();
- Window dialogWindow = mAlertDialog.getWindow();
- WindowManager.LayoutParams lp = dialogWindow.getAttributes();
- dialogWindow.setGravity(Gravity.LEFT | Gravity.TOP);
- //lp.x与lp.y表示相对于原始位置的偏移.
- //将对话框的大小按屏幕大小的百分比设置
- lp.x = (int) (width*0.05); // 新位置X坐标
- lp.y = (int) (height*0.2); // 新位置Y坐标
- lp.width = (int) (width*0.9); // 宽度
- lp.height = (int) (height*0.6); // 高度
- dialogWindow.setAttributes(lp);
- mAlertDialog.show();
最终效果如下:
版权声明:本文为博主原创文章,未经博主允许不得转载。