Android AlertDialog适配机型

一、前言

近两天在整理代码发现之前写的AlertDialog在6.0的机器上显示的和预想的效果不一样,例如我们自定义的边框圆角等效果。经过多次尝试,总结出下面的适配AlertDialog的方法。在敲AlertDialog的时候会提示有两个包下的AlertDialog,一个是android.support.v7.app.AlertDialog,一个是android.app.AlertDialog,先说下这两者的区别。

自从谷歌发布了Material Design设计之后,很多Material风格的控件也随之加入到了v7的兼容包下。这为开发者提供了很好的支持,省去了使用开源库和自己设计的烦恼。

android.support.v7.app.AlertDialog:兼容的AlertDialog

这个v7包下的AlertDialog在Android2.1以上可以提供兼容性的Material风格的Dialog

下面简单设置dialog的title和message:

AlertDialog.Builder builder=new AlertDialog.Builder(this);
        builder.setTitle("标题");
        builder.setMessage("消息");
        builder.show();

效果如下,从左至右依次是Android4.4、5.1、7.1.1:

Android AlertDialog适配机型_第1张图片Android AlertDialog适配机型_第2张图片Android AlertDialog适配机型_第3张图片

从图中可以看出都是统一的Material风格

          但是往往需求没有这么简单,需要加上一些效果,例如圆角、弹框的填充颜色,因此想到自定义布局

layout/dialog.xml:




    


drawable/dialog.xml:



    
    
AlertDialog.Builder builder=new AlertDialog.Builder(this);
//        builder.setTitle("标题");
//        builder.setMessage("消息");
        AlertDialog dialog = builder.show();
        Window window = dialog.getWindow();
        window.setContentView(R.layout.dialog);
在三台虚拟机上运行效果都如下图:

Android AlertDialog适配机型_第4张图片
可以看出不美观,没有预想的圆角效果,并且长宽比例不协调,这是因为默认设置了弹框的大小和风格,只在布局文件修改是不够的,需要修改window的属性,如下设置:

AlertDialog.Builder builder=new AlertDialog.Builder(this);
//        builder.setTitle("标题");
//        builder.setMessage("消息");
        AlertDialog dialog = builder.show();
        Window window = dialog.getWindow();
        window.setContentView(R.layout.dialog);
        window.setBackgroundDrawableResource(R.drawable.dialog); //设置window的背景(圆角效果、填充颜色等)
        window.setLayout(700,500); //设置window的宽高

         同样运行在三台虚拟机上,效果依次如下:

        Android AlertDialog适配机型_第5张图片Android AlertDialog适配机型_第6张图片Android AlertDialog适配机型_第7张图片

        通过效果图可以看出,预期的效果出来了,设置成功。

android.app.AlertDialog:非兼容AlertDialog

使用这个包下的AlertDialog在Android5.0以下的原始风格,5.0以上为Material风格,效果如下,左边为原始风格(Android4.4虚拟机),右边为Material风格(Android7.1.1虚拟机):

Android AlertDialog适配机型_第8张图片Android AlertDialog适配机型_第9张图片

但是如下使用自定义布局,并且设置了window的背景和宽高等属性,效果都是一样的。

二、总结

       如果根据需求所有的AlertDialog中布局都需要自定义,那么任选一个都行,不过要设备window的属性哦~






你可能感兴趣的:(Android屏幕适配,Android基础)