1 介绍
导包
implementation 'com.hjq:toast:8.8'
或
implementation group: 'com.hjq', name: 'toast', version: '8.2'
这里导入8.8 ,后面的部分代码不能使用,原作者使用的是9.6版本
2 初始化框架
ToastApplication.java
package com.example.toastutils;
import android.app.Application;
import com.hjq.toast.ToastUtils;
public final class ToastApplication extends Application {
@Override
public void onCreate() {
super.onCreate();
ToastUtils.init(this);
}
}
AndroidManifest.xml
<application
android:name=".ToastApplication"
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:roundIcon="@mipmap/ic_launcher_round"
android:supportsRtl="true"
android:theme="@style/Theme.ToastUtils">
<activity
android:name=".MainActivity"
android:exported="true">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application>
3 普通Toast
ToastUtils.show("我是普通的 Toast");

4 子线程中弹出的吐司
new Thread(new Runnable() {
@Override
public void run() {
ToastUtils.show("我是子线程中弹出的吐司");
}
}).start();
5 动态切换白色吐司样式
ToastUtils.setStyle(new WhiteToastStyle());
ToastUtils.show("动态切换白色吐司样式成功");

6 动态切换黑色吐司样式
ToastUtils.setStyle(new BlackToastStyle());
ToastUtils.show("动态切换黑色吐司样式成功");

7 自定义 Toast 布局
res->layout
:toast_custom_view.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:background="@drawable/shape_gradient"
android:gravity="center"
android:orientation="horizontal"
android:padding="10dp">
<ImageView
android:layout_width="40dp"
android:layout_height="40dp"
android:src="@mipmap/ic_launcher" />
<TextView
android:id="@android:id/message"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_margin="10dp"
android:textColor="#FFFFFFFF"
android:textSize="16sp" />
</LinearLayout>
res->drawable
:shape_gradient.xml
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android">
<gradient
android:angle="180"
android:endColor="#387cfd"
android:startColor="#26c4fd"
android:type="linear" />
<corners android:radius="10dp" />
</shape>
ToastUtils.setView(R.layout.toast_custom_view);
ToastUtils.setGravity(Gravity.CENTER);
ToastUtils.show("自定义 Toast 布局");

8 后台显示Toast
if (XXPermissions.isGranted(this, Permission.NOTIFICATION_SERVICE)) {
Snackbar.make(getWindow().getDecorView(), "正在准备跳转到手机桌面,请注意有极少数机型无法在后台显示 Toast", Snackbar.LENGTH_SHORT).show();
v.postDelayed(new Runnable() {
@Override
public void run() {
Intent intent = new Intent(Intent.ACTION_MAIN);
intent.addCategory(Intent.CATEGORY_HOME);
startActivity(intent);
}
}, 2000);
v.postDelayed(new Runnable() {
@Override
public void run() {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.R) {
ToastUtils.show("我是在后台显示的 Toast(Android 11 及以上在后台显示 Toast 只能使用系统样式)");
} else {
ToastUtils.show("我是在后台显示的 Toast");
}
}
}, 3000);
} else {
ToastUtils.show("在后台显示 Toast 需要先获取通知栏权限");
v.postDelayed(new Runnable() {
@Override
public void run() {
XXPermissions.startPermissionActivity(ToastActivity.this, Permission.NOTIFICATION_SERVICE);
}
}, 2000);
}
9 搭配XToast悬浮窗框架
new XToast<>(this)
.setDuration(1000)
.setContentView(ToastUtils.getStyle().createView(getApplication()))
.setAnimStyle(android.R.style.Animation_Translucent)
.setText(android.R.id.message, "就问你溜不溜")
.setGravity(Gravity.BOTTOM)
.setYOffset((int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, 50, getResources().getDisplayMetrics()))
.show();

参考地址:
https://github.com/getActivity/ToastUtils
<h2><a id="1__0"></a>1 介绍</h2>
<p>导包</p>
<pre><div class="hljs"><code class="lang-java"><span class="hljs-comment">//吐司框架</span>
implementation <span class="hljs-string">'com.hjq:toast:8.8'</span>
</code></div></pre>
<p>或</p>
<pre><div class="hljs"><code class="lang-java"><span class="hljs-comment">// https://mvnrepository.com/artifact/com.hjq/toast</span>
implementation group: <span class="hljs-string">'com.hjq'</span>, name: <span class="hljs-string">'toast'</span>, version: <span class="hljs-string">'8.2'</span>
</code></div></pre>
<p>这里导入8.8 ,后面的部分代码不能使用,原作者使用的是9.6版本</p>
<h2><a id="2__15"></a>2 初始化框架</h2>
<p>ToastApplication.java</p>
<pre><div class="hljs"><code class="lang-java"><span class="hljs-keyword">package</span> com.example.toastutils;
<span class="hljs-keyword">import</span> android.app.Application;
<span class="hljs-keyword">import</span> com.hjq.toast.ToastUtils;
<span class="hljs-keyword">public</span> <span class="hljs-keyword">final</span> <span class="hljs-keyword">class</span> <span class="hljs-title class_">ToastApplication</span> <span class="hljs-keyword">extends</span> <span class="hljs-title class_">Application</span> {
<span class="hljs-meta">@Override</span>
<span class="hljs-keyword">public</span> <span class="hljs-keyword">void</span> <span class="hljs-title function_">onCreate</span><span class="hljs-params">()</span> {
<span class="hljs-built_in">super</span>.onCreate();
<span class="hljs-comment">// 初始化 Toast 框架</span>
ToastUtils.init(<span class="hljs-built_in">this</span>);
}
}
</code></div></pre>
<p>AndroidManifest.xml</p>
<pre><div class="hljs"><code class="lang-xml"><span class="hljs-tag"><<span class="hljs-name">application</span>
<span class="hljs-attr">android:name</span>=<span class="hljs-string">".ToastApplication"</span>
<span class="hljs-attr">android:allowBackup</span>=<span class="hljs-string">"true"</span>
<span class="hljs-attr">android:icon</span>=<span class="hljs-string">"@mipmap/ic_launcher"</span>
<span class="hljs-attr">android:label</span>=<span class="hljs-string">"@string/app_name"</span>
<span class="hljs-attr">android:roundIcon</span>=<span class="hljs-string">"@mipmap/ic_launcher_round"</span>
<span class="hljs-attr">android:supportsRtl</span>=<span class="hljs-string">"true"</span>
<span class="hljs-attr">android:theme</span>=<span class="hljs-string">"@style/Theme.ToastUtils"</span>></span>
<span class="hljs-tag"><<span class="hljs-name">activity</span>
<span class="hljs-attr">android:name</span>=<span class="hljs-string">".MainActivity"</span>
<span class="hljs-attr">android:exported</span>=<span class="hljs-string">"true"</span>></span>
<span class="hljs-tag"><<span class="hljs-name">intent-filter</span>></span>
<span class="hljs-tag"><<span class="hljs-name">action</span> <span class="hljs-attr">android:name</span>=<span class="hljs-string">"android.intent.action.MAIN"</span> /></span>
<span class="hljs-tag"><<span class="hljs-name">category</span> <span class="hljs-attr">android:name</span>=<span class="hljs-string">"android.intent.category.LAUNCHER"</span> /></span>
<span class="hljs-tag"></<span class="hljs-name">intent-filter</span>></span>
<span class="hljs-tag"></<span class="hljs-name">activity</span>></span>
<span class="hljs-tag"></<span class="hljs-name">application</span>></span>
</code></div></pre>
<h2><a id="3_Toast_56"></a>3 普通Toast</h2>
<pre><div class="hljs"><code class="lang-java">ToastUtils.show(<span class="hljs-string">"我是普通的 Toast"</span>);
</code></div></pre>
<p><img src="https://static.couragesteak.com/article/e5b44faedd918ea80c939d045c861380.png" alt="普通Toast" /></p>
<h2><a id="4__62"></a>4 子线程中弹出的吐司</h2>
<pre><div class="hljs"><code class="lang-java"><span class="hljs-keyword">new</span> <span class="hljs-title class_">Thread</span>(<span class="hljs-keyword">new</span> <span class="hljs-title class_">Runnable</span>() {
<span class="hljs-meta">@Override</span>
<span class="hljs-keyword">public</span> <span class="hljs-keyword">void</span> <span class="hljs-title function_">run</span><span class="hljs-params">()</span> {
ToastUtils.show(<span class="hljs-string">"我是子线程中弹出的吐司"</span>);
}
}).start();
</code></div></pre>
<h2><a id="5__73"></a>5 动态切换白色吐司样式</h2>
<pre><div class="hljs"><code class="lang-java">ToastUtils.setStyle(<span class="hljs-keyword">new</span> <span class="hljs-title class_">WhiteToastStyle</span>());
ToastUtils.show(<span class="hljs-string">"动态切换白色吐司样式成功"</span>);
</code></div></pre>
<p><img src="https://static.couragesteak.com/article/5c14b0247e26b5f0ab29b744617d4bd7.png" alt="动态切换白色吐司样式" /></p>
<h2><a id="6__80"></a>6 动态切换黑色吐司样式</h2>
<pre><div class="hljs"><code class="lang-java">ToastUtils.setStyle(<span class="hljs-keyword">new</span> <span class="hljs-title class_">BlackToastStyle</span>());
ToastUtils.show(<span class="hljs-string">"动态切换黑色吐司样式成功"</span>);
</code></div></pre>
<p><img src="https://static.couragesteak.com/article/b2a4a5aa61ee4c8a43e048af1888331b.png" alt="动态切换黑色吐司样式" /></p>
<h2><a id="7__Toast__88"></a>7 自定义 Toast 布局</h2>
<p><code>res->layout</code>:toast_custom_view.xml</p>
<pre><div class="hljs"><code class="lang-xml"><span class="hljs-meta"><?xml version="1.0" encoding="utf-8"?></span>
<span class="hljs-tag"><<span class="hljs-name">LinearLayout</span> <span class="hljs-attr">xmlns:android</span>=<span class="hljs-string">"http://schemas.android.com/apk/res/android"</span>
<span class="hljs-attr">android:layout_width</span>=<span class="hljs-string">"wrap_content"</span>
<span class="hljs-attr">android:layout_height</span>=<span class="hljs-string">"wrap_content"</span>
<span class="hljs-attr">android:background</span>=<span class="hljs-string">"@drawable/shape_gradient"</span>
<span class="hljs-attr">android:gravity</span>=<span class="hljs-string">"center"</span>
<span class="hljs-attr">android:orientation</span>=<span class="hljs-string">"horizontal"</span>
<span class="hljs-attr">android:padding</span>=<span class="hljs-string">"10dp"</span>></span>
<span class="hljs-tag"><<span class="hljs-name">ImageView</span>
<span class="hljs-attr">android:layout_width</span>=<span class="hljs-string">"40dp"</span>
<span class="hljs-attr">android:layout_height</span>=<span class="hljs-string">"40dp"</span>
<span class="hljs-attr">android:src</span>=<span class="hljs-string">"@mipmap/ic_launcher"</span> /></span>
<span class="hljs-tag"><<span class="hljs-name">TextView</span>
<span class="hljs-attr">android:id</span>=<span class="hljs-string">"@android:id/message"</span>
<span class="hljs-attr">android:layout_width</span>=<span class="hljs-string">"wrap_content"</span>
<span class="hljs-attr">android:layout_height</span>=<span class="hljs-string">"wrap_content"</span>
<span class="hljs-attr">android:layout_margin</span>=<span class="hljs-string">"10dp"</span>
<span class="hljs-attr">android:textColor</span>=<span class="hljs-string">"#FFFFFFFF"</span>
<span class="hljs-attr">android:textSize</span>=<span class="hljs-string">"16sp"</span> /></span>
<span class="hljs-tag"></<span class="hljs-name">LinearLayout</span>></span>
</code></div></pre>
<p><code>res->drawable</code>:shape_gradient.xml</p>
<pre><div class="hljs"><code class="lang-xml"><span class="hljs-meta"><?xml version="1.0" encoding="utf-8"?></span>
<span class="hljs-tag"><<span class="hljs-name">shape</span> <span class="hljs-attr">xmlns:android</span>=<span class="hljs-string">"http://schemas.android.com/apk/res/android"</span>></span>
<span class="hljs-tag"><<span class="hljs-name">gradient</span>
<span class="hljs-attr">android:angle</span>=<span class="hljs-string">"180"</span>
<span class="hljs-attr">android:endColor</span>=<span class="hljs-string">"#387cfd"</span>
<span class="hljs-attr">android:startColor</span>=<span class="hljs-string">"#26c4fd"</span>
<span class="hljs-attr">android:type</span>=<span class="hljs-string">"linear"</span> /></span>
<span class="hljs-tag"><<span class="hljs-name">corners</span> <span class="hljs-attr">android:radius</span>=<span class="hljs-string">"10dp"</span> /></span>
<span class="hljs-tag"></<span class="hljs-name">shape</span>></span>
</code></div></pre>
<pre><div class="hljs"><code class="lang-java">ToastUtils.setView(R.layout.toast_custom_view);
ToastUtils.setGravity(Gravity.CENTER);
ToastUtils.show(<span class="hljs-string">"自定义 Toast 布局"</span>);
</code></div></pre>
<p><img src="https://static.couragesteak.com/article/8c99e3be081bace430f02c144b9f487e.png" alt="自定义 Toast 布局" /></p>
<h2><a id="8_Toast_137"></a>8 后台显示Toast</h2>
<pre><div class="hljs"><code class="lang-java"><span class="hljs-keyword">if</span> (XXPermissions.isGranted(<span class="hljs-built_in">this</span>, Permission.NOTIFICATION_SERVICE)) {
Snackbar.make(getWindow().getDecorView(), <span class="hljs-string">"正在准备跳转到手机桌面,请注意有极少数机型无法在后台显示 Toast"</span>, Snackbar.LENGTH_SHORT).show();
v.postDelayed(<span class="hljs-keyword">new</span> <span class="hljs-title class_">Runnable</span>() {
<span class="hljs-meta">@Override</span>
<span class="hljs-keyword">public</span> <span class="hljs-keyword">void</span> <span class="hljs-title function_">run</span><span class="hljs-params">()</span> {
<span class="hljs-type">Intent</span> <span class="hljs-variable">intent</span> <span class="hljs-operator">=</span> <span class="hljs-keyword">new</span> <span class="hljs-title class_">Intent</span>(Intent.ACTION_MAIN);
intent.addCategory(Intent.CATEGORY_HOME);
startActivity(intent);
}
}, <span class="hljs-number">2000</span>);
v.postDelayed(<span class="hljs-keyword">new</span> <span class="hljs-title class_">Runnable</span>() {
<span class="hljs-meta">@Override</span>
<span class="hljs-keyword">public</span> <span class="hljs-keyword">void</span> <span class="hljs-title function_">run</span><span class="hljs-params">()</span> {
<span class="hljs-keyword">if</span> (Build.VERSION.SDK_INT >= Build.VERSION_CODES.R) {
ToastUtils.show(<span class="hljs-string">"我是在后台显示的 Toast(Android 11 及以上在后台显示 Toast 只能使用系统样式)"</span>);
} <span class="hljs-keyword">else</span> {
ToastUtils.show(<span class="hljs-string">"我是在后台显示的 Toast"</span>);
}
}
}, <span class="hljs-number">3000</span>);
} <span class="hljs-keyword">else</span> {
ToastUtils.show(<span class="hljs-string">"在后台显示 Toast 需要先获取通知栏权限"</span>);
v.postDelayed(<span class="hljs-keyword">new</span> <span class="hljs-title class_">Runnable</span>() {
<span class="hljs-meta">@Override</span>
<span class="hljs-keyword">public</span> <span class="hljs-keyword">void</span> <span class="hljs-title function_">run</span><span class="hljs-params">()</span> {
XXPermissions.startPermissionActivity(ToastActivity.<span class="hljs-built_in">this</span>, Permission.NOTIFICATION_SERVICE);
}
}, <span class="hljs-number">2000</span>);
}
</code></div></pre>
<h2><a id="9_XToast_176"></a>9 搭配XToast悬浮窗框架</h2>
<pre><div class="hljs"><code class="lang-java"><span class="hljs-keyword">new</span> <span class="hljs-title class_">XToast</span><>(<span class="hljs-built_in">this</span>)
.setDuration(<span class="hljs-number">1000</span>)
.setContentView(ToastUtils.getStyle().createView(getApplication()))
.setAnimStyle(android.R.style.Animation_Translucent)
.setText(android.R.id.message, <span class="hljs-string">"就问你溜不溜"</span>)
.setGravity(Gravity.BOTTOM)
.setYOffset((<span class="hljs-type">int</span>) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, <span class="hljs-number">50</span>, getResources().getDisplayMetrics()))
.show();
</code></div></pre>
<p><img src="https://static.couragesteak.com/article/d495323d504351ace5e13c05be8d838f.png" alt="搭配XToast悬浮窗框架" /></p>
<p>参考地址:<br />
https://github.com/getActivity/ToastUtils</p>
留言