Android开发-弹框-Dialog

771 阅读2分钟

持续创作,加速成长!这是我参与「掘金日新计划 · 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的简单使用就介绍到这里了,欢迎留言指导。