浅谈自定义不规则背景的对话框,透明背景的对话框dialog定义过程中的注意事项

来源:互联网 发布:linux变量命名 编辑:程序博客网 时间:2024/06/08 11:35

开发中我们会遇到各种各样的布局,特别是漂亮的dialog,当然这些并不一定是规则的,那我们该怎么定义不规则的dialog呢?

先来看看效果图:


图片分离:

      

 

没错就是这三张图片。

现在我们来看看怎么实现这个dialog

需要注意的是:

1、必须是dialog这个类,其他子类无法实现,因为alertdialog之类的有默认的背景

2、不规则,其实是规则的,因为有些背景我们设置为了透明


布局:

<?xml version="1.0" encoding="utf-8"?><RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"    android:layout_width="wrap_content"    android:layout_height="wrap_content"    android:padding="5dp"    android:orientation="vertical">    <LinearLayout        android:id="@+id/alert_close"        android:layout_width="match_parent"        android:layout_height="wrap_content"        android:layout_marginEnd="20dp"        android:layout_marginTop="20dp"        android:background="@mipmap/dialog"        android:orientation="vertical"        android:padding="10dp">        <TextView            android:layout_width="match_parent"            android:layout_height="wrap_content"            android:layout_gravity="left"            android:gravity="center_horizontal"            android:padding="10dp"            android:text="@string/alert_update_title"            android:textColor="#F00"            android:textSize="20sp" />        <TextView            android:layout_width="match_parent"            android:layout_height="wrap_content"            android:layout_gravity="center_horizontal"            android:gravity="center"            android:paddingBottom="30dp"            android:paddingTop="30dp"            android:text="@string/alert_update_content"            android:textColor="#000"            android:textSize="14sp" />        <Button            android:id="@+id/alert_update_btn"            android:layout_width="wrap_content"            android:layout_height="wrap_content"            android:layout_gravity="center"            android:layout_marginBottom="15dp"            android:layout_weight="1"            android:background="@null"            android:text="@string/alert_update_update"            android:textColor="#000" />    </LinearLayout>    <ImageView        android:id="@+id/imageView"        android:layout_width="wrap_content"        android:layout_height="wrap_content"        android:layout_alignParentEnd="true"        android:layout_below="@id/alert_close"        android:src="@mipmap/dog" />    <Button        android:id="@+id/alert_no_update_btn"        android:layout_width="30dp"        android:layout_height="30dp"        android:layout_alignParentRight="true"        android:background="@mipmap/close" /></RelativeLayout>

布局预览:


第二步:我们需要自定义一个dialog的样式:

    <style name="update_dialog" parent="android:style/Theme.Dialog">        <item name="android:windowFrame">@null</item>        <item name="android:windowNoTitle">true</item>        <item name="android:windowBackground">@drawable/transpant_bg</item>        <item name="android:windowIsFloating">true</item>        <item name="android:windowContentOverlay">@null</item>    </style>
自定义透明的背景:
<shape xmlns:android="http://schemas.android.com/apk/res/android"    android:shape="rectangle">    <gradient        android:angle="270.0"        android:endColor="@android:color/transparent"        android:startColor="@android:color/transparent"></gradient></shape>

第三步:实现dialog

 private void selectUpdate(final String url) {        final Dialog builder = new Dialog(this, R.style.update_dialog);        View view = UIUtil.inflateView(R.layout.alert_update_welcome);//加载自己的布局        Button noUpdateBtn = (Button) view.findViewById(R.id.alert_no_update_btn);        Button updateBtn = (Button) view.findViewById(R.id.alert_update_btn);        noUpdateBtn.setOnClickListener(new View.OnClickListener() {            @Override            public void onClick(View view) {                //2、如果选择不更新,则直接判断是否是第一次进入                builder.dismiss();                isFirstIn();            }        });        updateBtn.setOnClickListener(new View.OnClickListener() {            @Override            public void onClick(View view) {                //1、如果选择更新直接进行下载安装新版本软件                downloadApk(url);                //2、判断是否下载成功                boolean downloadSuccess = isDownloadSuccess();                if (isDownloadSuccess()) {                    installApk();                } else {                    //下载失败                    downloadError();                }            }        });        builder.setContentView(view);//这里还可以指定布局参数        builder.setCancelable(false);// 不可以用“返回键”取消        builder.show();    }
当然你也直接可以继承dialog这个类,具体自定义就不用多说了。


当然还可以指定对话框的透明度,这是针对整个dialog而言的。

        Window window = alertDialog.getWindow();        WindowManager.LayoutParams lp = window.getAttributes();        lp.alpha = 0.8f;        window.setAttributes(lp);

学会这些你可以制定出各种各样的dialog。

0 0
原创粉丝点击