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

一直以来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) {

@Override
public 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">

<!-- 父布局不能忽略-->

<!-- 这个布局才是弹出来的布局-->
<LinearLayout
android: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.CircularProgressView
xmlns: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
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值