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

前言

回收删除对话框,继承AlertDialog。

仿照钉钉的长按弹出的移除置顶对话框。

效果图

代码分析

继承AlertDialog;

实现标题文本变化的情况下,对话框宽度保持不变。

使用步骤

一、项目组织结构图

注意事项:

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

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

二、导入步骤

将ArticleRemoveDelDialog复制到项目中(注意,需要重新import R文件)

package com.why.project.articleremovedeldialogdemo.dialog;

import android.app.Activity;
import android.app.AlertDialog;
import android.content.Context;
import android.os.Bundle;
import android.util.DisplayMetrics;
import android.view.View;
import android.view.ViewGroup;
import android.widget.LinearLayout;
import android.widget.TextView; import com.why.project.articleremovedeldialogdemo.R; /**
* Created by HaiyuKing
* Used 回收、删除对话框
*/ public class ArticleRemoveDelDialog extends AlertDialog {
private static final String TAG = ArticleRemoveDelDialog.class.getSimpleName(); private Context context;//上下文
private String buildTitle;//标题 private TextView title_tv;
private TextView remove_tv;
private TextView del_tv; public ArticleRemoveDelDialog(Context context, String buildTitle) {
super(context, R.style.style_alert_confirm_dialog); //设置为false,按对话框以外的地方不起作用
setCanceledOnTouchOutside(true);
//设置为false,按返回键不能退出
setCancelable(true); this.context = context;
this.buildTitle = buildTitle;
} protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.alert_dialog_remove_del); initViews();
initDatas();
initEvents();
} /**初始化view*/
private void initViews() {
title_tv = findViewById(R.id.title_tv);
remove_tv = findViewById(R.id.remove_tv);
del_tv = findViewById(R.id.del_tv);
} /**初始化数据*/
private void initDatas() {
title_tv.setText(buildTitle);//设置标题
//设置标题区域的宽度
final DisplayMetrics display = new DisplayMetrics();
((Activity)this.context).getWindowManager().getDefaultDisplay().getMetrics(display);
title_tv.setLayoutParams(new LinearLayout.LayoutParams(display.widthPixels - context.getResources().getDimensionPixelOffset(R.dimen.alert_dialog_confirm_margin) * 2, ViewGroup.LayoutParams.WRAP_CONTENT));
} /**初始化监听事件*/
private void initEvents() {
//回收
remove_tv.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if(mOnRemoveDelButtonClickListener != null){
mOnRemoveDelButtonClickListener.onRemoveButtonClick();
}
dismiss();
}
});
//删除
del_tv.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if(mOnRemoveDelButtonClickListener != null){
mOnRemoveDelButtonClickListener.onDelButtonClick();
}
dismiss();
}
});
} public static abstract interface OnRemoveDelButtonClickListener
{
//回收按钮的点击事件接口
public abstract void onRemoveButtonClick();
//删除按钮的点击事件接口
public abstract void onDelButtonClick();
} private OnRemoveDelButtonClickListener mOnRemoveDelButtonClickListener; public void setOnRemoveDelButtonClickListener(OnRemoveDelButtonClickListener mOnRemoveDelButtonClickListener)
{
this.mOnRemoveDelButtonClickListener = mOnRemoveDelButtonClickListener;
} }

ArticleRemoveDelDialog.java

在res/drawable目录中添加以下文件

将默认图标复制到项目中

将alert_dialog_remove_del.xml布局文件复制到项目中

在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> <!-- ==================确认取消对话框(alertdialog)================== -->
<!-- 对话框的填充颜色 -->
<color name="alert_dialog_confirm_solid_color">#ffffffff</color>
</resources>

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

<?xml version="1.0" encoding="utf-8"?>
<resources> <!-- ==================确认取消对话框(alertdialog)================== -->
<!-- 对话框的圆角角度 -->
<dimen name="alert_dialog_confirm_corners">5dp</dimen>
<!-- 对话框的整体外边距 -->
<dimen name="alert_dialog_confirm_margin">30dp</dimen>
</resources>

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

<resources>

    <!-- Base application theme. -->
<style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar">
<!-- Customize your theme here. -->
<item name="colorPrimary">@color/colorPrimary</item>
<item name="colorPrimaryDark">@color/colorPrimaryDark</item>
<item name="colorAccent">@color/colorAccent</item>
</style> <!-- ==================确认取消对话框(alertdialog)================== -->
<style name="style_alert_confirm_dialog">
<!-- Dialog的windowFrame框为无 -->
<item name="android:windowFrame">@null</item>
<!-- 是否显示title -->
<item name="android:windowNoTitle">false</item>
<!-- 是否浮现在activity之上 -->
<item name="android:windowIsFloating">true</item>
<!-- 半透明 -->
<item name="android:windowIsTranslucent">true</item>
<!-- 设置dialog的背景:#00000000透明色 -->
<item name="android:windowBackground">@android:color/transparent</item>
<!-- 背景变灰:整个屏幕变灰,配合setCanceledOnTouchOutside(false) -->
<item name="android:backgroundDimEnabled">true</item>
</style> </resources>

三、使用方法

package com.why.project.articleremovedeldialogdemo;

import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.view.View;
import android.widget.Button;
import android.widget.Toast; import com.why.project.articleremovedeldialogdemo.dialog.ArticleRemoveDelDialog; public class MainActivity extends AppCompatActivity { private Button btn_open; @Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main); initViews();
initEvents();
} private void initViews() {
btn_open = findViewById(R.id.btn_open);
} private void initEvents() {
btn_open.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
ArticleRemoveDelDialog articleRemoveDelDialog = new ArticleRemoveDelDialog(MainActivity.this,"这是一个标题,可能会很长文本,如果超过宽度的话,会省略号");
articleRemoveDelDialog.setOnRemoveDelButtonClickListener(new ArticleRemoveDelDialog.OnRemoveDelButtonClickListener() {
@Override
public void onRemoveButtonClick() {
Toast.makeText(MainActivity.this,"回收",Toast.LENGTH_SHORT).show();
} @Override
public void onDelButtonClick() {
Toast.makeText(MainActivity.this,"删除",Toast.LENGTH_SHORT).show();
}
});
articleRemoveDelDialog.show();
}
});
}
}

混淆配置

参考资料

暂时空缺

项目demo下载地址

https://github.com/haiyuKing/ArticleRemoveDelDialogDemo

ArticleRemoveDelDialog【基于AlertDialog的回收删除对话框】的更多相关文章

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

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

  2. js确认删除对话框

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

  3. 基于jQuery表格增加删除代码示例

    <!doctype html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  4. C#编程中,在页面上如何弹出确认删除对话框

    对于页面完成一个操作后,弹出一个对话框提示是否“操作成功”.举例如下:Response.Write("<script>alert('删除成功!')</script>& ...

  5. AlertDialog.Builder弹出对话框

    在Android中,弹出对话框使用AlertDialog.Builder方法. new AlertDialog.Builder(MainActivity.this).setTitle("本机 ...

  6. Android设置AlertDialog点击按钮对话框不关闭(转)

    (转自:http://blog.csdn.net/winson_jason/article/details/8485524) 当我们在用到Android alertDialog创建对话框 的时候,我们 ...

  7. ivew 封装删除 对话框

    封装的组件 <template> <Modal footer-hide :closable="false" title="删除确认" v-mo ...

  8. python基于selenium实现自动删除qq空间留言板

    py大法好,让你解放双手. 脚本环境 python环境,selenium库,Chrome webdriver驱动等. 源码 # coding=utf-8 import datetime import ...

  9. Android快速开发常用知识点系列目录

    项目构建 Android项目目录结构模板以及简单说明[简单版] Android Studio配置统一管理依赖版本号引用 Android多Module下的Application引用方式 APP开篇 An ...

随机推荐

  1. ESXI的安装和部署

     1.  实验拓扑图: 2.  实验要求 (1)   新建一台exsi主机,安装exsi5.5系统. 步骤: 1)新建虚拟机,导入光盘. 2)安装esxi系统 (2)在exsi主机中,配置IP地址为1 ...

  2. 一支烟的时间导致他错失女神,Python查看撤回消息,力挽狂澜!

    2011年1月21日 微信(WeChat) 是腾讯公司于2011年1月21日推出的一个为智能终端提供即时通讯服务的免费应用程序,由张小龙所带领的腾讯广州研发中心产品团队打造 .在互联网飞速发展的下.民 ...

  3. SpringBoot JMS(ActiveMQ) 使用实践

    ActiveMQ 1. 下载windows办的activeMQ后,在以下目录可以启动: 2. 启动后会有以下提示 3. 所以我们可以通过http://localhost:8161访问管理页面,通过tc ...

  4. Ceph万兆内网与系统万兆迁移

    本文将总结一次为Ceph集群加装万兆内网(cluster network),后因需要对比实验来研究分布式存储集群在计算,网络,存储过程中各部分耗时比例,而将Ceph整体系统又整体搬移至万兆网的过程.但 ...

  5. 页面性能优化-原生JS实现图片懒加载

    在项目开发中,我们往往会遇到一个页面需要加载很多图片的情况.我们可以一次性加载全部的图片,但是考虑到用户有可能只浏览部分图片.所以我们需要对图片加载进行优化,只加载浏览器窗口内的图片,当用户滚动时,再 ...

  6. 并发的核心:CAS 与synchronized, Java8是如何优化 CAS 的?

    大家可能都听说说 Java 中的并发包,如果想要读懂 Java 中的并发包,其核心就是要先读懂 CAS 机制,因为 CAS 可以说是并发包的底层实现原理. 今天就带大家读懂 CAS 是如何保证操作的原 ...

  7. C# 《编写高质量代码改善建议》整理&笔记 --(六)编码规范及习惯

    一.命名规范 1.考虑在命名空间中使用复数 System.AllCollections System.TheCollection 2.用名词和名词组给类型命名 ScoreManager UserCon ...

  8. KnockoutJS知识规整目录

    对于Web开发来讲,前端接触是避免不了的,特别是对于中小公司,没有严格的职位区分,前后端人员互相身兼是常有的事情,使用一些好的框架,能够帮助我们快速开发并完成需要的功能,对于前端的JS框架来讲MVVM ...

  9. [译]PEP 342--增强型生成器:协程

    PEP原文 : https://www.python.org/dev/peps/pep-0342/ PEP标题: Coroutines via Enhanced Generators PEP作者: G ...

  10. CSharpGL(46)用Billboard绘制头顶文字

    CSharpGL(46)用Billboard绘制头顶文字 本文介绍CSharpGL用Billboard绘制头顶文字的方法.效果如下图所示. 下载 CSharpGL已在GitHub开源,欢迎对OpenG ...