持续创作,加速成长!这是我参与「掘金日新计划 · 6 月更文挑战」的第13天,点击查看活动详情
前面我们介绍了安卓开发过程中弹框的几种常用的实现方式,总结起来有那么五种,今天就先介绍系统自带的最原始的弹框-Dialog。
Dialog 弹框
其实我们正常开发过程中对系统的Dialog的使用都是通过自定义的UI,通过继承系统Dialog来实现开发过程中的业务的,当然也可以直接使用,通过setContentView方法来设置系统Dialog的内容。
先来看下直接使用Dialog的实现:
首先我们得先定义下这个Dialog的样式:
<!--对话框的样式-->
<style name="MyCustomDialogStyle">
<!--对话框背景 -->
<item name="android:windowBackground">@android:color/transparent</item>
<!--边框 -->
<item name="android:windowFrame">@null</item>
<!--没有标题 -->
<item name="android:windowNoTitle">true</item>
<!-- 是否浮现在Activity之上 -->
<item name="android:windowIsFloating">true</item>
<!--背景透明 -->
<item name="android:windowIsTranslucent">false</item>
<!-- 是否有覆盖 -->
<item name="android:windowContentOverlay">@null</item>
</style>
public class MainActivity extends Activity {
private Dialog dialog;
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
btn_dialog.setOnClickListener{ ->
initDialog();
}
}
private void initDialog(){
dialog = new Dialog(this, R.style.MyCustomDialogStyle);
View view = View.inflate(this, R.layout.layout_dialog, null);
dialog.setContentView(view);
dialog.setCanceledOnTouchOutside(true);
//设置弹框的显示属性
Window dialogWindow = dialog.getWindow();
WindowManager.LayoutParams lp = dialogWindow.getAttributes();
lp.width = (int) (ScreenSizeUtils.getInstance(this).getScreenWidth() * 0.9f);
lp.height = WindowManager.LayoutParams.WRAP_CONTENT;
lp.gravity = Gravity.BOTTOM;
dialogWindow.setAttributes(lp);
dialog.show();
}
}
简单设置了一个按钮的点击弹出的UI,直接实现弹框的弹出,直接new出来就可以了,通过setContentView方法来设置UI,正常我们在开发过程中类似像修改头像这种底部弹框的UI就可以使用系统的Dialog来实现,只要设置一个布局,并且设置弹出方式为Gravity.BOTTOM,就可以实现了。
我们还可以通过继承的关系实现:
public class MyCustomDialog extends Dialog{ }
这样的方式,系统会让我们实现Dialog的构造方法
public MyCustomDialog(Context context) {
super(context, R.style.MyCustomDialogStyle);
setContentView(R.layout.layout_dialog);
this.mContext = context;
initDialog();
}
在initDialog中初始化Dialog需要使用到的View,以及弹框的一些属性,显示方式等。
private void initDialog(){
setCanceledOnTouchOutside(true);
//设置弹框的显示属性
Window dialogWindow = getWindow();
WindowManager.LayoutParams lp = dialogWindow.getAttributes();
lp.width = (int) (ScreenSizeUtils.getInstance(this).getScreenWidth() * 0.9f);
lp.height = WindowManager.LayoutParams.WRAP_CONTENT;
lp.gravity = Gravity.BOTTOM;
dialogWindow.setAttributes(lp);
show();
}
是不是也很简单,这样的好处就是可以写出一个比较通用的弹框,提供给其他需要的地方调用了。
Dialog的简单使用就介绍到这里了,欢迎留言指导。