可以自定义布局的对话框---CommonDialog

来源:互联网 发布:网络教育本科毕业论文 编辑:程序博客网 时间:2024/05/20 09:44

一直以来Android中弹出对话框的布局都是个问题,自带的布局基本无法满足开发使用,一个项目中可能会弹出很多对话框,而且这些对话框的布局都不一样,每次都去自定义一个dialog类有很麻烦,所以这里分享一个我在自己项目中写的可以自定义布局的通用的dialog,每次只需要写一个布局就可以了,不需要每次都去自定义类,用上去感觉和popupwindow很相似,但又不需要自己让背景变半透明,很好用。废话不多说了上代码:第一步 、自定义的类:package com.ytd.finding.widget;import android.app.Dialog;import android.content.Context;import android.view.LayoutInflater;import android.view.View;import android.view.ViewGroup;import com.ytd.finding.R;public class CommonDialog extends Dialog {public CommonDialog(Context context) {super(context);}public CommonDialog(Context context, int theme) {super(context, theme);}public static abstract class Builder {private Context context;final CommonDialog dialog;public Builder(Context context) {this.context = context;dialog = new CommonDialog(context, R.style.Dialog);}public View getView(int layoutId) {LayoutInflater inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);View layout = inflater.inflate(layoutId, null);dialog.addContentView(layout, new ViewGroup.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.WRAP_CONTENT));return layout;}public CommonDialog build(int layoutId){onViewCreated(getView(layoutId),dialog);return dialog;}abstract public void onViewCreated(View view,Dialog dialog);}}第二步、定义一个style: //这个style一定不要忘了如下:<style name="Dialog" parent="android:style/Theme.Dialog"><item name="android:background">#00000000</item><item name="android:windowBackground">@android:color/transparent</item><item name="android:windowNoTitle">true</item><item name="android:windowIsFloating">true</item></style>第三步、在实战中的使用private void showDialog() {CommonDialog dialog = new CommonDialog.Builder(this) {@Overridepublic void onViewCreated(View view, Dialog dialog) {//在这里可以初始化布局中的控件,以及点击事件等,所需要在对话框中的操作。。。// findViewById().....}}.build(R.layout.dialog_waiting);//这里是自定义的布局文件资源dialog.setCancelable(false);dialog.setCanceledOnTouchOutside(false);dialog.show();}第四步、写定义的布局文件这个布局文件的最外层是一个FragmeLayout 背景色不做任何处理对话框弹出的样式是 LinearLayout布局的样式和内容<?xml version="1.0" encoding="utf-8"?><FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"android:layout_width="fill_parent"android:layout_height="fill_parent"android:clickable="true"android:orientation="vertical"><!-- 父布局不能忽略--><!-- 这个布局才是弹出来的布局--><LinearLayoutandroid:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_gravity="center"android:background="@drawable/free_dialog_bg"android:orientation="vertical"><com.github.rahatarmanahmed.cpv.CircularProgressViewxmlns:app="http://schemas.android.com/apk/res-auto"app:cpv_thickness="3dp"android:padding="12dp"app:cpv_animAutostart="true"app:cpv_color="@color/me_blue"app:cpv_indeterminate="true"app:cpv_animSteps="3"android:layout_width="80dp"android:layout_height="80dp"/></LinearLayout></FrameLayout>


3 0