轻松实现 Android 任意弹窗,用 DialogFragment 封装的框架 —— TDialog

本文主要是介绍轻松实现 Android 任意弹窗,用 DialogFragment 封装的框架 —— TDialog,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

目录

  • 简介
  • 一、效果图
  • 二、代码实现
    • 1.导入TDialog库
    • 2.创建弹窗布局dialog.xml
    • 3.代码中使用TDialog
    • 4.弹窗打开关闭时的回调
    • 5.MainActivity完整代码
    • 6.设置弹窗动画
  • 后记

简介

TDialog是用于实现Android弹窗的框架

Github地址:https://github.com/Timmy-zzh/TDialog

一、效果图

二、代码实现

1.导入TDialog库

在app模块下的build.gradle引入TDialog

implementation 'com.timmy.tdialog:tdialog:1.3.1'

2.创建弹窗布局dialog.xml

这里根据自己的需要写:

<?xml version="1.0" encoding="utf-8"?>
<android.support.constraint.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"android:layout_width="wrap_content"android:layout_height="wrap_content"xmlns:app="http://schemas.android.com/apk/res-auto"><ImageViewandroid:id="@+id/bg"android:src="@drawable/bg_dialog"android:layout_width="wrap_content"android:layout_height="wrap_content" /><TextViewandroid:id="@+id/text"android:layout_width="wrap_content"android:layout_height="wrap_content"android:text="Hello World!"app:layout_constraintVertical_bias="0.6"app:layout_constraintHorizontal_bias="0.55"app:layout_constraintBottom_toBottomOf="parent"app:layout_constraintLeft_toLeftOf="parent"app:layout_constraintRight_toRightOf="parent"app:layout_constraintTop_toTopOf="parent" /><Buttonandroid:id="@+id/cancel"android:text="Cancel"android:textAllCaps="false"android:background="#00000000"app:layout_constraintTop_toTopOf="parent"app:layout_constraintLeft_toLeftOf="@id/bg"app:layout_constraintRight_toRightOf="@id/bg"app:layout_constraintBottom_toBottomOf="@id/bg"app:layout_constraintHorizontal_bias="0.88"app:layout_constraintVertical_bias="0.9"android:layout_width="wrap_content"android:layout_height="wrap_content" /><Buttonandroid:id="@+id/ok"android:text="OK"android:textAllCaps="false"android:background="#00000000"app:layout_constraintTop_toTopOf="parent"app:layout_constraintBottom_toBottomOf="@id/bg"app:layout_constraintRight_toLeftOf="@id/cancel"app:layout_constraintVertical_bias="0.9"android:layout_width="wrap_content"android:layout_height="wrap_content" />
</android.support.constraint.ConstraintLayout>

附上背景图:

3.代码中使用TDialog

new TDialog.Builder(getSupportFragmentManager()).setLayoutRes(R.layout.dialog)    //设置弹窗展示的xml布局.setScreenWidthAspect(MainActivity.this, 0.8f)   //设置弹窗宽度(参数aspect为屏幕宽度比例 0 - 1f).setScreenHeightAspect(MainActivity.this, 0.3f)  //设置弹窗高度(参数aspect为屏幕宽度比例 0 - 1f).addOnClickListener(R.id.ok,R.id.cancel).setOnViewClickListener(new OnViewClickListener() {@Overridepublic void onViewClick(BindViewHolder viewHolder, View view, TDialog tDialog) {switch (view.getId()){case R.id.ok:TextView text = viewHolder.getView(R.id.text);text.setText("点击了ok");break;case R.id.cancel:tDialog.dismiss();break;}}}).create()   //创建TDialog.show();    //展示

根据屏幕比例设置弹窗的宽高,需要添加点击事件的话,先使用addOnClickListener将控件id传入,再在setOnViewClickListener中根据点击的id触发相应的事件。需要用到布局中的控件的话,使用viewHolder.getView(R.id.xxx)找到控件,再进行相应的操作即可。这里作者也提供了另一种操作方式,如上图中的

TextView text = viewHolder.getView(R.id.text);
text.setText("点击了ok");

也可以写成:

viewHolder.setText(R.id.text,"点击了ok");

4.弹窗打开关闭时的回调

如果在打开弹窗时需要进行一些初始化操作,在TDialog的create方法之前连缀setOnBindViewListener即可。

如果要在弹窗消失时进行一些操作,在TDialog的create方法之前连缀setOnDismissListener即可。代码如下:

new TDialog.Builder(getSupportFragmentManager()).setLayoutRes(R.layout.dialog)    //设置弹窗展示的xml布局.setScreenWidthAspect(MainActivity.this, 0.8f)   //设置弹窗宽度(参数aspect为屏幕宽度比例 0 - 1f).setScreenHeightAspect(MainActivity.this, 0.3f)  //设置弹窗高度(参数aspect为屏幕宽度比例 0 - 1f).setOnBindViewListener(new OnBindViewListener() {@Overridepublic void bindView(BindViewHolder viewHolder) {TextView text = viewHolder.getView(R.id.text);text.setText("初始化");}}).setOnDismissListener(new DialogInterface.OnDismissListener() {@Overridepublic void onDismiss(DialogInterface dialog) {Toast.makeText(MainActivity.this, "cancel", Toast.LENGTH_SHORT).show();}}).addOnClickListener(R.id.ok,R.id.cancel).setOnViewClickListener(new OnViewClickListener() {@Overridepublic void onViewClick(BindViewHolder viewHolder, View view, TDialog tDialog) {switch (view.getId()){case R.id.ok:viewHolder.setText(R.id.text,"点击了ok");break;case R.id.cancel:tDialog.dismiss();break;}}}).create()   //创建TDialog.show();    //展示

5.MainActivity完整代码

MainActivity的布局只有一个button,很简单,这里就不贴布局代码了,看一下MainActivity的完整代码:

package com.cpx.tdialog;import android.content.DialogInterface;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;
import android.widget.Toast;import com.timmy.tdialog.TDialog;
import com.timmy.tdialog.base.BindViewHolder;
import com.timmy.tdialog.listener.OnBindViewListener;
import com.timmy.tdialog.listener.OnViewClickListener;public class MainActivity extends AppCompatActivity {Button btn;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);btn = findViewById(R.id.btn);btn.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View v) {new TDialog.Builder(getSupportFragmentManager()).setLayoutRes(R.layout.dialog)    //设置弹窗展示的xml布局.setScreenWidthAspect(MainActivity.this, 0.8f)   //设置弹窗宽度(参数aspect为屏幕宽度比例 0 - 1f).setScreenHeightAspect(MainActivity.this, 0.3f)  //设置弹窗高度(参数aspect为屏幕宽度比例 0 - 1f).setOnBindViewListener(new OnBindViewListener() {@Overridepublic void bindView(BindViewHolder viewHolder) {TextView text = viewHolder.getView(R.id.text);text.setText("初始化");}}).setOnDismissListener(new DialogInterface.OnDismissListener() {@Overridepublic void onDismiss(DialogInterface dialog) {Toast.makeText(MainActivity.this, "cancel", Toast.LENGTH_SHORT).show();}}).addOnClickListener(R.id.ok,R.id.cancel).setOnViewClickListener(new OnViewClickListener() {@Overridepublic void onViewClick(BindViewHolder viewHolder, View view, TDialog tDialog) {switch (view.getId()){case R.id.ok:viewHolder.setText(R.id.text,"点击了ok");break;case R.id.cancel:tDialog.dismiss();break;}}}).create()   //创建TDialog.show();    //展示}});}
}

这样就实现了文章开始时的效果。

6.设置弹窗动画

在create之前连缀setDialogAnimationRes即可

.setDialogAnimationRes(R.style.animate_dialog)  //设置弹窗动画

后记

实现万能弹窗还有一种方式:使用弹窗风格的Activity:https://blog.csdn.net/alpinistwang/article/details/80348786
好处是这样的弹窗就是一个我们熟悉的Activity。

这篇关于轻松实现 Android 任意弹窗,用 DialogFragment 封装的框架 —— TDialog的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/307462

相关文章

Java实现MD5加密的四种方式

《Java实现MD5加密的四种方式》MD5是一种广泛使用的哈希算法,其输出结果是一个128位的二进制数,通常以32位十六进制数的形式表示,MD5的底层实现涉及多个复杂的步骤和算法,本文给大家介绍了Ja... 目录MD5介绍Java 中实现 MD5 加密方式方法一:使用 MessageDigest方法二:使用

mysql删除无用用户的方法实现

《mysql删除无用用户的方法实现》本文主要介绍了mysql删除无用用户的方法实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧... 1、删除不用的账户(1) 查看当前已存在账户mysql> select user,host,pa

Nginx配置location+rewrite实现隐性域名配置

《Nginx配置location+rewrite实现隐性域名配置》本文主要介绍了Nginx配置location+rewrite实现隐性域名配置,包括基于根目录、条件和反向代理+rewrite配置的隐性... 目录1、配置基于根目录的隐性域名(就是nginx反向代理)2、配置基于条件的隐性域名2.1、基于条件

Linux配置IP地址的三种实现方式

《Linux配置IP地址的三种实现方式》:本文主要介绍Linux配置IP地址的三种实现方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录环境RedHat9第一种安装 直接配置网卡文件第二种方式 nmcli(Networkmanager command-line

Java导入、导出excel用法步骤保姆级教程(附封装好的工具类)

《Java导入、导出excel用法步骤保姆级教程(附封装好的工具类)》:本文主要介绍Java导入、导出excel的相关资料,讲解了使用Java和ApachePOI库将数据导出为Excel文件,包括... 目录前言一、引入Apache POI依赖二、用法&步骤2.1 创建Excel的元素2.3 样式和字体2.

Java实现将Markdown转换为纯文本

《Java实现将Markdown转换为纯文本》这篇文章主要为大家详细介绍了两种在Java中实现Markdown转纯文本的主流方法,文中的示例代码讲解详细,大家可以根据需求选择适合的方案... 目录方法一:使用正则表达式(轻量级方案)方法二:使用 Flexmark-Java 库(专业方案)1. 添加依赖(Ma

使用EasyExcel实现简单的Excel表格解析操作

《使用EasyExcel实现简单的Excel表格解析操作》:本文主要介绍如何使用EasyExcel完成简单的表格解析操作,同时实现了大量数据情况下数据的分次批量入库,并记录每条数据入库的状态,感兴... 目录前言固定模板及表数据格式的解析实现Excel模板内容对应的实体类实现AnalysisEventLis

Mybatis从3.4.0版本到3.5.7版本的迭代方法实现

《Mybatis从3.4.0版本到3.5.7版本的迭代方法实现》本文主要介绍了Mybatis从3.4.0版本到3.5.7版本的迭代方法实现,包括主要的功能增强、不兼容的更改和修复的错误,具有一定的参考... 目录一、3.4.01、主要的功能增强2、selectCursor example3、不兼容的更改二、

如何使用C#串口通讯实现数据的发送和接收

《如何使用C#串口通讯实现数据的发送和接收》本文详细介绍了如何使用C#实现基于串口通讯的数据发送和接收,通过SerialPort类,我们可以轻松实现串口通讯,并结合事件机制实现数据的传递和处理,感兴趣... 目录1. 概述2. 关键技术点2.1 SerialPort类2.2 异步接收数据2.3 数据解析2.

mybatis-plus 实现查询表名动态修改的示例代码

《mybatis-plus实现查询表名动态修改的示例代码》通过MyBatis-Plus实现表名的动态替换,根据配置或入参选择不同的表,本文主要介绍了mybatis-plus实现查询表名动态修改的示... 目录实现数据库初始化依赖包配置读取类设置 myBATis-plus 插件测试通过 mybatis-plu