# XToast **Repository Path**: lengguangzhishen/XToast ## Basic Information - **Project Name**: XToast - **Description**: Android 悬浮窗框架,好用不解释 - **Primary Language**: Java - **License**: Apache-2.0 - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 9 - **Created**: 2023-10-26 - **Last Updated**: 2023-10-26 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # 悬浮窗框架 * 项目地址:[Github](https://github.com/getActivity/XToast)、[码云](https://gitee.com/getActivity/XToast) * 博客地址:[悬浮窗需求终结者](https://www.jianshu.com/p/247d705b87b6) * 可以扫码下载 Demo 进行演示或者测试,如果扫码下载不了的,[点击此处可直接下载](https://github.com/getActivity/XToast/releases/download/8.5/XToast.apk) ![](picture/demo_code.png) ![](picture/dynamic_figure.gif) #### 本框架意在解决一些极端需求,如果是普通的 Toast 封装推荐使用 [ToastUtils](https://github.com/getActivity/ToastUtils) #### 集成步骤 * 如果你的项目 Gradle 配置是在 `7.0 以下`,需要在 `build.gradle` 文件中加入 ```groovy allprojects { repositories { // JitPack 远程仓库:https://jitpack.io maven { url 'https://jitpack.io' } } } ``` * 如果你的 Gradle 配置是 `7.0 及以上`,则需要在 `settings.gradle` 文件中加入 ```groovy dependencyResolutionManagement { repositories { // JitPack 远程仓库:https://jitpack.io maven { url 'https://jitpack.io' } } } ``` * 配置完远程仓库后,在项目 app 模块下的 `build.gradle` 文件中加入远程依赖 ```groovy android { // 支持 JDK 1.8 compileOptions { targetCompatibility JavaVersion.VERSION_1_8 sourceCompatibility JavaVersion.VERSION_1_8 } } dependencies { // 悬浮窗框架:https://github.com/getActivity/XToast implementation 'com.github.getActivity:XToast:8.5' } ``` #### 使用案例 * Java 用法 ```java // 传入 Activity 对象表示设置成局部的,不需要有悬浮窗权限 // 传入 Application 对象表示设置成全局的,但需要有悬浮窗权限 new XToast<>(this) .setContentView(R.layout.toast_hint) // 设置成可拖拽的 //.setDraggable() // 设置显示时长 .setDuration(1000) // 设置动画样式 //.setAnimStyle(android.R.style.Animation_Translucent) // 设置外层是否能被触摸 //.setOutsideTouchable(false) // 设置窗口背景阴影强度 //.setBackgroundDimAmount(0.5f) .setImageDrawable(android.R.id.icon, R.mipmap.ic_dialog_tip_finish) .setText(android.R.id.message, "点我消失") .setOnClickListener(android.R.id.message, new XToast.OnClickListener() { @Override public void onClick(XToast toast, TextView view) { // 点击这个 View 后消失 toast.cancel(); // 跳转到某个Activity // toast.startActivity(intent); } }) .show(); ``` * Kotlin 用法(二选一) ```kotlin XToast>(activity).apply { setContentView(R.layout.toast_hint) // 设置成可拖拽的 //setDraggable() // 设置显示时长 setDuration(1000) // 设置动画样式 //setAnimStyle(android.R.style.Animation_Translucent) // 设置外层是否能被触摸 //setOutsideTouchable(false) // 设置窗口背景阴影强度 //setBackgroundDimAmount(0.5f) setImageDrawable(android.R.id.icon, R.mipmap.ic_dialog_tip_finish) setText(android.R.id.message, "点我消失") setOnClickListener(android.R.id.message, XToast.OnClickListener { toast: XToast<*>, view: TextView? -> // 点击这个 View 后消失 toast.cancel() // 跳转到某个Activity // toast.startActivity(intent); }) }.show() ``` ```kotlin XToast>(activity) .setContentView(R.layout.toast_hint) // 设置成可拖拽的 //.setDraggable() // 设置显示时长 .setDuration(1000) // 设置动画样式 //.setAnimStyle(android.R.style.Animation_Translucent) // 设置外层是否能被触摸 //.setOutsideTouchable(false) // 设置窗口背景阴影强度 //.setBackgroundDimAmount(0.5f) .setImageDrawable(android.R.id.icon, R.mipmap.ic_dialog_tip_finish) .setText(android.R.id.message, "点我消失") .setOnClickListener(android.R.id.message, XToast.OnClickListener { toast: XToast<*>, view: TextView? -> // 点击这个 View 后消失 toast.cancel() // 跳转到某个Activity // toast.startActivity(intent); }) .show() ``` #### 没有悬浮窗权限如何全局显示? * 没有悬浮窗权限是不能全局显示在其他应用上的,但是全局显示在自己的应用上是可以实现的 * 但是当前 Activity 创建的悬浮窗只能在当前 Activity 上面显示,如果想在所有的 Activity 都显示需要做特殊处理 * 我们可以通过 Application 来监听所有 Activity 的生命周期方法,然后在每个 Activity.onCreate 时创建悬浮窗 ```java public final class FloatingLifecycle implements Application.ActivityLifecycleCallbacks { static void with(Application application) { application.registerActivityLifecycleCallbacks(new FloatingLifecycle()); } @Override public void onActivityCreated(Activity activity, Bundle savedInstanceState) { new XToast<>(activity) .setView(R.layout.xxx) .show(); } @Override public void onActivityStarted(Activity activity) {} @Override public void onActivityResumed(Activity activity) {} @Override public void onActivityPaused(Activity activity) {} @Override public void onActivityStopped(Activity activity) {} @Override public void onActivitySaveInstanceState(Activity activity, Bundle outState) {} @Override public void onActivityDestroyed(Activity activity) {} } ``` #### 框架亮点(原生 Toast 无法实现的功能) * 支持自定义 Toast 动画样式 * 支持自定义 Toast 显示时长 * 支持监听 Toast 的显示和销毁 * 支持监听 Toast 中点击事件 * 支持一键开启 Toast 拖拽功能 * 支持 Toast 全局显示 #### 作者的其他开源项目 * 安卓技术中台:[AndroidProject](https://github.com/getActivity/AndroidProject) ![](https://img.shields.io/github/stars/getActivity/AndroidProject.svg) ![](https://img.shields.io/github/forks/getActivity/AndroidProject.svg) * 安卓技术中台 Kt 版:[AndroidProject-Kotlin](https://github.com/getActivity/AndroidProject-Kotlin) ![](https://img.shields.io/github/stars/getActivity/AndroidProject-Kotlin.svg) ![](https://img.shields.io/github/forks/getActivity/AndroidProject-Kotlin.svg) * 权限框架:[XXPermissions](https://github.com/getActivity/XXPermissions) ![](https://img.shields.io/github/stars/getActivity/XXPermissions.svg) ![](https://img.shields.io/github/forks/getActivity/XXPermissions.svg) * 吐司框架:[ToastUtils](https://github.com/getActivity/ToastUtils) ![](https://img.shields.io/github/stars/getActivity/ToastUtils.svg) ![](https://img.shields.io/github/forks/getActivity/ToastUtils.svg) * 网络框架:[EasyHttp](https://github.com/getActivity/EasyHttp) ![](https://img.shields.io/github/stars/getActivity/EasyHttp.svg) ![](https://img.shields.io/github/forks/getActivity/EasyHttp.svg) * 标题栏框架:[TitleBar](https://github.com/getActivity/TitleBar) ![](https://img.shields.io/github/stars/getActivity/TitleBar.svg) ![](https://img.shields.io/github/forks/getActivity/TitleBar.svg) * Shape 框架:[ShapeView](https://github.com/getActivity/ShapeView) ![](https://img.shields.io/github/stars/getActivity/ShapeView.svg) ![](https://img.shields.io/github/forks/getActivity/ShapeView.svg) * 语种切换框架:[MultiLanguages](https://github.com/getActivity/MultiLanguages) ![](https://img.shields.io/github/stars/getActivity/MultiLanguages.svg) ![](https://img.shields.io/github/forks/getActivity/MultiLanguages.svg) * Gson 解析容错:[GsonFactory](https://github.com/getActivity/GsonFactory) ![](https://img.shields.io/github/stars/getActivity/GsonFactory.svg) ![](https://img.shields.io/github/forks/getActivity/GsonFactory.svg) * 日志查看框架:[Logcat](https://github.com/getActivity/Logcat) ![](https://img.shields.io/github/stars/getActivity/Logcat.svg) ![](https://img.shields.io/github/forks/getActivity/Logcat.svg) * Android 版本适配:[AndroidVersionAdapter](https://github.com/getActivity/AndroidVersionAdapter) ![](https://img.shields.io/github/stars/getActivity/AndroidVersionAdapter.svg) ![](https://img.shields.io/github/forks/getActivity/AndroidVersionAdapter.svg) * Android 代码规范:[AndroidCodeStandard](https://github.com/getActivity/AndroidCodeStandard) ![](https://img.shields.io/github/stars/getActivity/AndroidCodeStandard.svg) ![](https://img.shields.io/github/forks/getActivity/AndroidCodeStandard.svg) * Studio 精品插件:[StudioPlugins](https://github.com/getActivity/StudioPlugins) ![](https://img.shields.io/github/stars/getActivity/StudioPlugins.svg) ![](https://img.shields.io/github/forks/getActivity/StudioPlugins.svg) * 表情包大集合:[EmojiPackage](https://github.com/getActivity/EmojiPackage) ![](https://img.shields.io/github/stars/getActivity/EmojiPackage.svg) ![](https://img.shields.io/github/forks/getActivity/EmojiPackage.svg) * 省市区 Json 数据:[ProvinceJson](https://github.com/getActivity/ProvinceJson) ![](https://img.shields.io/github/stars/getActivity/ProvinceJson.svg) ![](https://img.shields.io/github/forks/getActivity/ProvinceJson.svg) #### 微信公众号:Android轮子哥 ![](https://raw.githubusercontent.com/getActivity/Donate/master/picture/official_ccount.png) #### Android 技术分享 QQ 群:78797078 #### 如果您觉得我的开源库帮你节省了大量的开发时间,请扫描下方的二维码随意打赏,要是能打赏个 10.24 :monkey_face:就太:thumbsup:了。您的支持将鼓励我继续创作:octocat: ![](https://raw.githubusercontent.com/getActivity/Donate/master/picture/pay_ali.png) ![](https://raw.githubusercontent.com/getActivity/Donate/master/picture/pay_wechat.png) #### [点击查看捐赠列表](https://github.com/getActivity/Donate) ## License ```text Copyright 2019 Huang JinQun Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. ```