版权声明:本文为HaiyuKing原创文章,转载请注明出处!

前言

对确认取消对话框的封装。

前提:调用对话框的Activity必须继承FragmentActivity及其子类(比如AppCompatActivity)。

效果图

代码分析

ConfirmCancelDialog继承DialogFragment;

默认展现左侧、中间、右侧三个按钮,通过DialogSetListener控制按钮的隐藏【比如,如果想要展现一个按钮,那么需要手动将其他两个按钮隐藏】;

通过DialogClickListener实现左侧、中间、右侧三个按钮的监听事件。

实现了点击空白区域隐藏对话框的功能。

使用步骤

一、项目组织结构图

注意事项:

1、导入类文件后需要change包名以及重新import R文件路径

2、Values目录下的文件(strings.xml、dimens.xml、colors.xml等),如果项目中存在,则复制里面的内容,不要整个覆盖

二、导入步骤

将ConfirmCancelDialog.java文件复制到项目中

package com.why.project.confirmcanceldialogdemo.dialog;

import android.content.Context;
import android.content.DialogInterface;
import android.graphics.drawable.ColorDrawable;
import android.os.Bundle;
import android.support.v4.app.DialogFragment;
import android.support.v4.content.ContextCompat;
import android.util.DisplayMetrics;
import android.util.Log;
import android.view.Gravity;
import android.view.KeyEvent;
import android.view.LayoutInflater;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.ViewGroup;
import android.view.Window;
import android.widget.Button;
import android.widget.TextView; import com.why.project.confirmcanceldialogdemo.R; /**
* Used 确认取消对话框样式【含有标题、左中右三个按钮(同时适用于两个按钮、一个按钮)】
*/
public class ConfirmCancelDialog extends DialogFragment{ private static final String TAG = ConfirmCancelDialog.class.getSimpleName(); private Context mContext;
/**View实例*/
private View myView;
/**标记:用来代表是从哪个界面打开的这个对话框*/
private String mTag; private boolean locked;//点击空白区域是否隐藏对话框 /**设置对话框内容和样式的监听器(标题、内容、按钮样式,包括控制隐藏)*/
private DialogSetListener mDialogSetListener;
/**三个按钮的点击事件监听器*/
private DialogClickListener mDialogClickListener; public static ConfirmCancelDialog getInstance(Context mContext, DialogSetListener mDialogSetListener){
return getInstance(mContext,false,mDialogSetListener);
} public static ConfirmCancelDialog getInstance(Context mContext, boolean locked, DialogSetListener mDialogSetListener){
ConfirmCancelDialog dialog = new ConfirmCancelDialog();
dialog.mContext = mContext;
dialog.locked = locked;
dialog.mDialogSetListener = mDialogSetListener; return dialog;
} @Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
getDialog().getWindow().setBackgroundDrawable(new ColorDrawable(0));//设置背景为透明,并且没有标题
//getDialog().getWindow().setBackgroundDrawable(new ColorDrawable(Color.parseColor("#80000000")));//设置背景为半透明,并且没有标题
getDialog().requestWindowFeature(Window.FEATURE_NO_TITLE);// 去掉标题栏 myView = inflater.inflate(R.layout.dialog_confirm_cancel, container, false); if(locked) {
this.getDialog().setOnKeyListener(new DialogInterface.OnKeyListener() {
public boolean onKey(DialogInterface dialog, int keyCode, KeyEvent event) {
if (keyCode == KeyEvent.KEYCODE_BACK) {
return true; // return true是中断事件,那么下面的就接受不到按键信息了
} else {
return false; //在return false的时候 才会事件继续向下传递。
}
}
});
} return myView;
} @Override
public void onActivityCreated(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onActivityCreated(savedInstanceState);
//初始化控件以及设置初始数据和监听事件
initView();
} /**
* 设置宽度和高度值,以及打开的动画效果
*/
@Override
public void onStart() {
super.onStart(); //设置对话框的宽高,必须在onStart中
DisplayMetrics metrics = new DisplayMetrics();
this.getActivity().getWindowManager().getDefaultDisplay().getMetrics(metrics);
Window window = this.getDialog().getWindow();
if(locked){
window.setLayout(metrics.widthPixels, metrics.heightPixels - getStatusBarHeight(mContext));//这样可以实现点击空白区域无法隐藏对话框的功能
}else {
window.setLayout(metrics.widthPixels, this.getDialog().getWindow().getAttributes().height);//这样才能实现点击空白区域自动隐藏对话框
}
window.setGravity(Gravity.CENTER);//设置在中间
//打开的动画效果--缩放+渐隐
} /**获取状态栏的高度*/
private int getStatusBarHeight(Context context) {
int resourceId = context.getResources().getIdentifier("status_bar_height", "dimen", "android");
return context.getResources().getDimensionPixelSize(resourceId);
} @Override
public void onDismiss(DialogInterface dialog) {
super.onDismiss(dialog);
//根据需要执行
if(mDialogClickListener != null){
mDialogClickListener.onDismissListener();
}
} /**实例化控件*/
@SuppressWarnings("deprecation")
private void initView() {
TextView title = (TextView)myView.findViewById(R.id.title);//标题
TextView titleDelever = (TextView)myView.findViewById(R.id.delever_up_message);//标题下划线 TextView message = (TextView)myView.findViewById(R.id.message);//内容 Button leftBtn = (Button)myView.findViewById(R.id.cancel);//左侧按钮
View leftDeliver = (View)myView.findViewById(R.id.leftdeliver);//左侧按钮右侧的中竖线
Button betweenBtn = (Button)myView.findViewById(R.id.between);//中间按钮
Button rightBtn = (Button)myView.findViewById(R.id.confirm);//右侧按钮
View rightDeliver = (View)myView.findViewById(R.id.rightdeliver);//右侧按钮左侧的中竖线 //==========================初始展现==========================
if(mDialogSetListener != null){
mDialogSetListener.setDialog(title, message, leftBtn, betweenBtn, rightBtn);
} //如果标题文字不存在,则隐藏标题中横线
if(title.getVisibility() == View.GONE){
titleDelever.setVisibility(View.GONE);
} //如果内容文字不存在,则隐藏标题中横线
if(message.getVisibility() == View.GONE){
titleDelever.setVisibility(View.GONE);
} //如果左侧按钮不存在,则隐藏左侧按钮旁边的中竖线,中间按钮的背景修改为原左侧按钮的背景
if(leftBtn.getVisibility() == View.GONE) {
leftDeliver.setVisibility(View.GONE);
betweenBtn.setBackgroundDrawable(ContextCompat.getDrawable(getActivity(),R.drawable.dialog_confirm_cancel_left_btn_bg));
if(betweenBtn.getVisibility() == View.GONE) {
rightDeliver.setVisibility(View.GONE);
rightBtn.setBackgroundDrawable(ContextCompat.getDrawable(getActivity(),R.drawable.dialog_confirm_cancel_btnlayout_bg));
}else if(rightBtn.getVisibility() == View.GONE) {
rightDeliver.setVisibility(View.GONE);
betweenBtn.setBackgroundDrawable(ContextCompat.getDrawable(getActivity(),R.drawable.dialog_confirm_cancel_btnlayout_bg));
}
}
//如果中间按钮不存在,则隐藏左侧按钮旁边的中竖线
if(betweenBtn.getVisibility() == View.GONE) {
leftDeliver.setVisibility(View.GONE);
if(leftBtn.getVisibility() == View.GONE) {
rightDeliver.setVisibility(View.GONE);
rightBtn.setBackgroundDrawable(ContextCompat.getDrawable(getActivity(),R.drawable.dialog_confirm_cancel_btnlayout_bg));
}else if(rightBtn.getVisibility() == View.GONE){
rightDeliver.setVisibility(View.GONE);
leftBtn.setBackgroundDrawable(ContextCompat.getDrawable(getActivity(),R.drawable.dialog_confirm_cancel_btnlayout_bg));
}
}
//如果右侧按钮不存在,则隐藏右侧按钮旁边的中竖线,中间按钮的背景修改为原右侧按钮的背景
if(rightBtn.getVisibility() == View.GONE) {
rightDeliver.setVisibility(View.GONE);
betweenBtn.setBackgroundDrawable(ContextCompat.getDrawable(getActivity(),R.drawable.dialog_confirm_cancel_right_btn_bg));
if(betweenBtn.getVisibility() == View.GONE) {
leftDeliver.setVisibility(View.GONE);
leftBtn.setBackgroundDrawable(ContextCompat.getDrawable(getActivity(),R.drawable.dialog_confirm_cancel_btnlayout_bg));
}else if(leftBtn.getVisibility() == View.GONE) {
leftDeliver.setVisibility(View.GONE);
betweenBtn.setBackgroundDrawable(ContextCompat.getDrawable(getActivity(),R.drawable.dialog_confirm_cancel_btnlayout_bg));
}
} mTag = this.getTag();
Log.e(TAG, "mTag="+mTag); //==========================初始化监听事件==========================
leftBtn.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
if(mDialogClickListener != null){
mDialogClickListener.cancelClickListener();
}
dismiss();
}
});
betweenBtn.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
if(mDialogClickListener != null){
mDialogClickListener.betweenClickListener();
}
dismiss();
}
});
rightBtn.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
if(mDialogClickListener != null){
mDialogClickListener.confirmClickListener();
}
dismiss();
}
}); } /**设置对话框内容和样式的监听器(标题、内容、按钮样式,包括控制隐藏)*/
public static abstract interface DialogSetListener
{
/**设置标题、内容、按钮的文本以及按钮的显示隐藏
* @param title - 标题控件【默认“提示”】
* @param message - 内容控件【默认空白】
* @param leftBtn - 左侧按钮控件【默认“取消”】
* @param betweenBtn - 中间按钮控件【默认空白】
* @param rightBtn - 右侧按钮控件【默认“确定”】*/
public abstract void setDialog(TextView title, TextView message, Button leftBtn, Button betweenBtn, Button rightBtn);
} /**三个按钮的点击事件监听器*/
public static abstract interface DialogClickListener
{
/**中间按钮*/
public abstract void betweenClickListener();
/**取消按钮*/
public abstract void cancelClickListener();
/**确定按钮*/
public abstract void confirmClickListener();
//返回键触发的事件接口
public abstract void onDismissListener();
} public void setDialogClickListener(DialogClickListener dialogClickListener) {
mDialogClickListener = dialogClickListener;
} }

ConfirmCancelDialog.java

将布局文件dialog_confirm_cancel.xml复制到项目的res/layout目录中

<?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:background="@android:color/transparent"
android:gravity="center" > <RelativeLayout
android:id="@+id/relativeLayout"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginLeft="@dimen/confirm_cancel_dialog_margin"
android:layout_marginRight="@dimen/confirm_cancel_dialog_margin"
android:background="@drawable/dialog_confirm_cancel_bg" >
<!-- 标题 -->
<TextView
android:id="@+id/title"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:gravity="center"
android:text="@string/confirm_cancel_title"
android:textColor="@color/confirm_cancel_dialog_title_color"
android:textSize="@dimen/confirm_cancel_dialog_title_text_size"
android:padding="@dimen/confirm_cancel_dialog_title_padding"/>
<!-- 标题下的中横线 -->
<TextView
android:id="@+id/delever_up_message"
android:layout_width="match_parent"
android:layout_height="1dp"
android:layout_below="@id/title"
android:layout_marginLeft="@dimen/confirm_cancel_dialog_delever_margin"
android:layout_marginRight="@dimen/confirm_cancel_dialog_delever_margin"
android:background="@color/confirm_cancel_dialog_delever_h_color" />
<!-- 内容 -->
<TextView
android:id="@+id/message"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_below="@id/delever_up_message"
android:gravity="center"
android:textColor="@color/confirm_cancel_dialog_message_color"
android:text=""
android:textSize="@dimen/confirm_cancel_dialog_message_text_size"
android:paddingTop="@dimen/confirm_cancel_dialog_message_padding"
android:paddingBottom="@dimen/confirm_cancel_dialog_message_padding"
android:paddingLeft="@dimen/confirm_cancel_dialog_title_padding"
android:paddingRight="@dimen/confirm_cancel_dialog_title_padding"/>
<!-- 内容下的中横线 -->
<View
android:id="@+id/delever_down_message"
android:layout_width="match_parent"
android:layout_height="1dp"
android:layout_below="@id/message"
android:layout_marginLeft="@dimen/confirm_cancel_dialog_delever_margin"
android:layout_marginRight="@dimen/confirm_cancel_dialog_delever_margin"
android:background="@color/confirm_cancel_dialog_delever_v_color" />
<!-- 底部按钮区域 -->
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_below="@id/delever_down_message"
android:orientation="horizontal"
android:background="@android:color/transparent" >
<!-- 取消按钮 -->
<Button
android:id="@+id/cancel"
android:layout_width="0.0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:background="@drawable/dialog_confirm_cancel_left_btn_bg"
android:gravity="center"
android:text="@string/confirm_cancel_left_btn"
android:textStyle="bold"
android:textColor="@color/confirm_cancel_dialog_btn_ctext_color"
android:textSize="@dimen/confirm_cancel_dialog_btn_text_size"
android:paddingTop="@dimen/confirm_cancel_dialog_title_padding"
android:paddingBottom="@dimen/confirm_cancel_dialog_title_padding" />
<!-- 取消按钮旁边的中竖线 -->
<View
android:id="@+id/leftdeliver"
android:layout_width="1dp"
android:layout_height="match_parent"
android:background="@color/confirm_cancel_dialog_delever_v_color"
android:orientation="vertical" />
<!-- 中间按钮 -->
<Button
android:id="@+id/between"
android:layout_width="0.0dip"
android:layout_height="wrap_content"
android:layout_weight="1.0"
android:background="@drawable/dialog_confirm_cancel_center_btn_bg"
android:gravity="center"
android:text=""
android:textStyle="bold"
android:textColor="@color/confirm_cancel_dialog_btn_ctext_color"
android:textSize="@dimen/confirm_cancel_dialog_btn_text_size"
android:paddingTop="@dimen/confirm_cancel_dialog_title_padding"
android:paddingBottom="@dimen/confirm_cancel_dialog_title_padding" />
<!-- 确定按钮旁边的中竖线 -->
<View
android:id="@+id/rightdeliver"
android:layout_width="1dp"
android:layout_height="match_parent"
android:background="@color/confirm_cancel_dialog_delever_v_color"
android:orientation="vertical" />
<!-- 确定按钮 -->
<Button
android:id="@+id/confirm"
android:layout_width="0.0dip"
android:layout_height="wrap_content"
android:layout_weight="1.0"
android:background="@drawable/dialog_confirm_cancel_right_btn_bg"
android:gravity="center"
android:text="@string/confirm_cancel_right_btn"
android:textStyle="bold"
android:textColor="@color/confirm_cancel_dialog_btn_ctext_color"
android:textSize="@dimen/confirm_cancel_dialog_btn_text_size"
android:paddingTop="@dimen/confirm_cancel_dialog_title_padding"
android:paddingBottom="@dimen/confirm_cancel_dialog_title_padding" />
</LinearLayout>
</RelativeLayout> </RelativeLayout>

dialog_confirm_cancel.xml

将drawable目录中的文件复制到项目中

在colors.xml文件中添加以下代码

<?xml version="1.0" encoding="utf-8"?>
<resources>
<color name="colorPrimary">#3F51B5</color>
<color name="colorPrimaryDark">#303F9F</color>
<color name="colorAccent">#FF4081</color> <!-- ==================确认取消对话框================== -->
<!-- 对话框的边框颜色 -->
<color name="confirm_cancel_dialog_stroke_color">#00ffffff</color>
<!-- 对话框的填充颜色 -->
<color name="confirm_cancel_dialog_solid_color">#ffffffff</color>
<!-- 对话框的标题颜色 -->
<color name="confirm_cancel_dialog_title_color">#0164C5</color>
<!-- 对话框的中横线颜色 -->
<color name="confirm_cancel_dialog_delever_h_color">#0164C5</color>
<!-- 对话框的中竖线颜色 -->
<color name="confirm_cancel_dialog_delever_v_color">#80DFDFDF</color>
<!-- 对话框的内容颜色 -->
<color name="confirm_cancel_dialog_message_color">#6A6A6A</color>
<!-- 对话框的按钮背景默认颜色 -->
<color name="confirm_cancel_dialog_btn_def_color">#00ffffff</color>
<!-- 对话框的按钮背景触发颜色 -->
<color name="confirm_cancel_dialog_btn_click_color">#00ffffff</color>
<!-- 对话框的按钮文字颜色 -->
<color name="confirm_cancel_dialog_btn_ctext_color">#000000</color> </resources>

在dimens.xml文件中添加以下代码

<resources>
<!-- Default screen margins, per the Android Design guidelines. -->
<dimen name="activity_horizontal_margin">16dp</dimen>
<dimen name="activity_vertical_margin">16dp</dimen> <!-- ==================确认取消对话框================== -->
<!-- 对话框的圆角角度 -->
<dimen name="confirm_cancel_dialog_corners">5dp</dimen>
<!-- 对话框的整体外边距 -->
<dimen name="confirm_cancel_dialog_margin">40dp</dimen>
<!-- 对话框的标题内边距 -->
<dimen name="confirm_cancel_dialog_title_padding">10dp</dimen>
<!-- 对话框的标题大小 -->
<dimen name="confirm_cancel_dialog_title_text_size">18sp</dimen>
<!-- 中横线的外边距 -->
<dimen name="confirm_cancel_dialog_delever_margin">1dp</dimen>
<!-- 对话框的内容内边距 -->
<dimen name="confirm_cancel_dialog_message_padding">25dp</dimen>
<!-- 对话框的内容大小 -->
<dimen name="confirm_cancel_dialog_message_text_size">16sp</dimen>
<!-- 对话框的按钮大小 -->
<dimen name="confirm_cancel_dialog_btn_text_size">16sp</dimen> </resources>

在strings.xml文件中添加以下代码

<resources>
<string name="app_name">ConfirmCancelDialogDemo</string> <!-- ************确认取消对话框************ -->
<string name="confirm_cancel_title">提示</string>
<string name="confirm_cancel_right_btn">确定</string>
<string name="confirm_cancel_left_btn">取消</string>
<string name="confirm_between_btn">保存</string> </resources>

三、使用方法

只展现一个确定按钮

btn_confirm.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
ConfirmCancelDialog dialog = ConfirmCancelDialog.getInstance(MainActivity.this,true,new ConfirmCancelDialog.DialogSetListener() { public void setDialog(TextView title, TextView message, Button leftBtn, Button betweenBtn, Button rightBtn) {
message.setText("请检查用户名");
leftBtn.setVisibility(GONE);
betweenBtn.setVisibility(GONE);
}
});
dialog.setDialogClickListener(new ConfirmCancelDialog.DialogClickListener() { @Override
public void betweenClickListener() {
// TODO Auto-generated method stub
} @Override
public void cancelClickListener() {
// TODO Auto-generated method stub
} @Override
public void confirmClickListener() {
Toast.makeText(MainActivity.this,"确定",Toast.LENGTH_SHORT).show();
} @Override
public void onDismissListener() { } });
dialog.show(getSupportFragmentManager(), "confirmDialog");
}
});

展现确定和取消两个按钮

btn_confirmcancel.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
ConfirmCancelDialog dialog = ConfirmCancelDialog.getInstance(MainActivity.this,new ConfirmCancelDialog.DialogSetListener() { public void setDialog(TextView title, TextView message, Button leftBtn, Button betweenBtn, Button rightBtn) {
message.setText("是否退出?");
betweenBtn.setVisibility(GONE);
}
});
dialog.setDialogClickListener(new ConfirmCancelDialog.DialogClickListener() { @Override
public void betweenClickListener() {
// TODO Auto-generated method stub
} @Override
public void cancelClickListener() {
Toast.makeText(MainActivity.this,"取消",Toast.LENGTH_SHORT).show();
} @Override
public void confirmClickListener() {
Toast.makeText(MainActivity.this,"确定",Toast.LENGTH_SHORT).show();
} @Override
public void onDismissListener() { } });
dialog.show(getSupportFragmentManager(), "confirmCancelDialog");
}
});

展现三个按钮,并且修改了按钮的文本

btn_confirmcancelbetween.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
ConfirmCancelDialog dialog = ConfirmCancelDialog.getInstance(MainActivity.this,new ConfirmCancelDialog.DialogSetListener() { public void setDialog(TextView title, TextView message, Button leftBtn, Button betweenBtn, Button rightBtn) {
message.setText("是否保存?");
betweenBtn.setText("不保存");
rightBtn.setText("保存");
}
});
dialog.setDialogClickListener(new ConfirmCancelDialog.DialogClickListener() { @Override
public void betweenClickListener() {
Toast.makeText(MainActivity.this,"不保存",Toast.LENGTH_SHORT).show();
} @Override
public void cancelClickListener() {
Toast.makeText(MainActivity.this,"取消",Toast.LENGTH_SHORT).show();
} @Override
public void confirmClickListener() {
Toast.makeText(MainActivity.this,"保存",Toast.LENGTH_SHORT).show();
} @Override
public void onDismissListener() { } });
dialog.show(getSupportFragmentManager(), "confirmCancelBetweenDialog");
}
});

展现没有标题的对话框

btn_notitle.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
ConfirmCancelDialog dialog = ConfirmCancelDialog.getInstance(MainActivity.this,new ConfirmCancelDialog.DialogSetListener() { public void setDialog(TextView title, TextView message, Button leftBtn, Button betweenBtn, Button rightBtn) {
message.setText("发现新版本,是否升级?");
title.setVisibility(GONE);
betweenBtn.setVisibility(GONE);
}
});
dialog.setDialogClickListener(new ConfirmCancelDialog.DialogClickListener() { @Override
public void betweenClickListener() {
// TODO Auto-generated method stub
} @Override
public void cancelClickListener() {
Toast.makeText(MainActivity.this,"取消",Toast.LENGTH_SHORT).show();
} @Override
public void confirmClickListener() {
Toast.makeText(MainActivity.this,"确定",Toast.LENGTH_SHORT).show();
} @Override
public void onDismissListener() { } });
dialog.show(getSupportFragmentManager(), "noTitleDialog");
}
});

展现内容文本很多的对话框(需要手动设置居左对齐)

btn_message.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
ConfirmCancelDialog dialog = ConfirmCancelDialog.getInstance(MainActivity.this,new ConfirmCancelDialog.DialogSetListener() { public void setDialog(TextView title, TextView message, Button leftBtn, Button betweenBtn, Button rightBtn) {
message.setText("当内容文本很多的时候,可以手动设置居左【message.setGravity(Gravity.LEFT)】");
message.setGravity(Gravity.LEFT);//如果内容很多的话,需要手动设置居左
betweenBtn.setVisibility(GONE);
}
});
dialog.setDialogClickListener(new ConfirmCancelDialog.DialogClickListener() { @Override
public void betweenClickListener() {
// TODO Auto-generated method stub
} @Override
public void cancelClickListener() {
Toast.makeText(MainActivity.this,"取消",Toast.LENGTH_SHORT).show();
} @Override
public void confirmClickListener() {
Toast.makeText(MainActivity.this,"确定",Toast.LENGTH_SHORT).show();
} @Override
public void onDismissListener() { } });
dialog.show(getSupportFragmentManager(), "noMessageDialog");
}
});

混淆配置

参考资料

暂时空缺

项目demo下载地址

https://github.com/haiyuKing/ConfirmCancelDialogDemo

ConfirmCancelDialog【确认取消对话框】的更多相关文章

  1. ConfirmCancelUtilDialog【确认取消对话框封装类】

    版权声明:本文为HaiyuKing原创文章,转载请注明出处! 前言 对确认取消对话框的封装. 前提:调用对话框的Activity必须继承FragmentActivity及其子类(比如AppCompat ...

  2. AlertConfirmDialog【基于AlertDialog的确认取消对话框】

    版权声明:本文为HaiyuKing原创文章,转载请注明出处! 前言 确认取消对话框,基于AlertDialog.不是基于DialogFragment. 按钮文本可以根据实际情况更换. 效果图 代码分析 ...

  3. javaScript 删除事件 弹出确认 取消对话框

    javaScript 删除事件 弹出确认 取消对话框 1. <a href="javascript:if(confirm('确实要删除?'))location='http://www. ...

  4. js 弹出确认 取消对话框

    一种: <a href="javascript:if(confirm('确实要删除该内容吗?')){location='http://www.google.com'}"> ...

  5. javascript window.confirm确认 取消对话框实现代码小结

    本文章讲述的三种都是基于了javascript confirm提示确认框的做法了,只是在不同的地方写哦,有需要的同学可参考一下   confirm() 方法 confirm() 方法用于显示一个带有指 ...

  6. js常用 弹出确认 取消对话框

    <!DOCTYPE html><html><head> <title></title> <meta charset='utf-8'&g ...

  7. ConfirmCancelBottomSheetDialog【确认取消底部对话框】

    版权声明:本文为HaiyuKing原创文章,转载请注明出处! 前言 继承BottomSheetDialog,实现简单的确认取消对话框样式. 效果图 代码分析 ConfirmCancelBottomSh ...

  8. Android 手机卫士--确认密码对话框编写

    本文接着实现“确认密码”功能,也即是用户以前设置过密码,现在只需要输入确认密码 本文地址:http://www.cnblogs.com/wuyudong/p/5940718.html,转载请注明出处. ...

  9. js确认删除对话框

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...

随机推荐

  1. 提高测试脚本复用性降低DOM结构引起路径变化的影响

    问题描述 在定位元素时直接复制的xpath. 但是因为下面这些原因导致之前引用的路径失效, 不得不频繁修改脚本重新定位元素, 大降低了脚本的复用性, 也增加了维护的成本: 1. UI修改 (比如增加了 ...

  2. [Noi2016]区间 BZOJ4653 洛谷P1712 Loj#2086

    额... 首先,看到这道题,第一想法就是二分答案+线段树... 兴高采烈的认为我一定能AC,之后发现n是500000... nlog^2=80%,亲测可过... 由于答案是求满足题意的最大长度-最小长 ...

  3. DNS Server Centos 7

    1.安裝服務 #yum update –y #yum install bind –y #systemctl  start named             開啟服務named #systemctl ...

  4. linux系统版本查看

    Linux下如何查看版本信息, 包括位数.版本信息以及CPU内核信息.CPU具体型号等等,整个CPU信息一目了然. 1.# uname -a   (Linux查看版本当前操作系统内核信息)   Lin ...

  5. 原型模式--java代码实现

    原型模式 原型模式,属于对象创建型模式中的一种.通过复制原型对象的方法来创建一个对象实例,且该对象与原对象有相同的数据结构和值.类似我们在备份数据库信息的时候,将数据库中表的结构和数据的一同备份,生成 ...

  6. 用Python学分析 - 正态分布

    正态分布(Normal Distribution) 1.正态分布是一种连续分布,其函数可以在实线上的任何地方取值. 2.正态分布由两个参数描述:分布的平均值μ和方差σ2 . 3.正态分布的取值可以从负 ...

  7. [Android]自己动手做个拼图游戏

    目标 在做这个游戏之前,我们先定一些小目标列出来,一个一个的解决,这样,一个小游戏就不知不觉的完成啦.我们的目标如下: 游戏全屏,将图片拉伸成屏幕大小,并将其切成若干块. 将拼图块随机打乱,并保证其能 ...

  8. Java的自定义注解使用实例

    概念 Java有五个元注解,自动继承java.lang.annotation.Annotation. 什么是元注解,可以理解为其他普通注解进行解释说明 @Target  该注解的使用范围,限定应用场景 ...

  9. .NET Core之微信支付之公众号、H5支付篇

    前言 本篇主要记录微信支付中公众号及H5支付全过程. 准备篇 公众号或者服务号(并开通微信支付功能).商户平台中开通JSAPI支付.H5支付. 配置篇 公众号或者服务号中 -------开发----- ...

  10. AI,如何影响你在看的影视剧和综艺?

    文章发布于公号[数智物语] (ID:decision_engine),关注公号不错过每一篇干货. 转自 |  涵的硅谷成长笔记(公众号ID:HanGrowth) 作者 | Han涵 前段时间,作为奥斯 ...