背景:
现有的AlertDialog之类的现有对话框类必须得依赖上下文环境创建,生命周期也受其控制。那么没有可以依赖的上下文环境弹框怎么实现,如跨应用弹框,暗码弹框等。
思路:
需要依赖Activity,将Activity直接设计成对话框样式。
步骤:
1. 定义对话框样式style:
2.在AndroidManifest.xml中设置activity的theme为自定义style.
3. 创建圆角形状的shape
<shape xmlns:android="http://schemas.android.com/apk/res/android">
<solid android:color="#ffffff" />
<corners android:radius="12dp" />
</shape>
4. 将shape作为activity窗口的背景。
重点:
1. 如何设置对话框的大小。
方法一: 在oncreate函数中通过WindowManager和Window设置:
Window win = this.getWindow();
win.getDecorView().setPadding(0, 0, 0, 0);
WindowManager.LayoutParams lp = win.getAttributes();
lp.width = 600;
lp.height = 400;
lp.gravity = Gravity.CENTER;
win.setAttributes(lp);
方法二:直接在layout文件中设置根布局的宽高:
android:layout_width="300dp"
android:layout_height="200dp"
2. 如何设置对话框圆角。
方法一:oncreate中设置window的背景资源:
win.getDecorView().setBackgroundResource(R.drawable.deviceinfo_dialog_shape);
方法二:style中设置windowbackground:
<item name="android:windowBackground">@drawable/deviceinfo_dialog_shape</item>。
3.其实强大的android框架提供了好多属性可以满足各种样式,Dialog的属性可以参考frameworks/base/core/res/res/values/themes.xml "Theme.Dialog"的属性集。关于window的有: