30. 【Android教程】吐司提示:Toast 的使用方法

在使用 Android 手机的时候,有没有遇到过如图中这种类型的消息提示?

这个在 Android 中被称为 Toast,用来短暂的展示一些简短的提示信息。相比弹窗来讲它对用户的打扰更小,在提示一段时间之后会自动消失,通常用来提示当前的状态或者一些不太重要的信息。接下来我们先看看 Toast 的相关特性然后一起动手编写一些与 Toasts 相关的示例代码。

1. Toast 的特性

其实大家在使用 Android 手机的时候大致能够了解 Toast 的特征,这里简单归纳一下:

  • 用来展示简短消息提示的控件
  • 会在短暂展示之后自动消失
  • Toast 不会阻塞 Activiity 或者 Fragment 的运行
  • 比较适合用来给用户的某个操作做一个反馈

2. Toast 的使用方法

Toast 直接继承自 Object,相当于是一个比较原始的控件,封装的也比较友好,我们先来看看 Toast 可用的 API 及相关参数

2.1 Toast 常用 API

  • public static Toast makeText(Context context, CharSequence text, int duration):
    用于创建一个 Toast 并设置具体的提示文案及展示时长
  • public void show():
    顾名思义,触发 Toast 的展示
  • public void setMargin(float horizontal, float vertical):
    用于设置 Toast 垂直方向和水平方向上的间距
  • public void setView(View view):
    自定义展示的布局样式

2.2 Toast 中的常量参数

  • public static final int LENGTH_LONG:
    长时间展示,大约维持 3.5 秒
  • public static final int LENGTH_SHORT:
    短时间展示,大约维持 2 秒

2.3 如何创建

  1. 调用 Toast 的静态方法makeText:传入Context、字符串文案、显示时长即可创建一个 Toast。为了避免内存泄露,这里的 Context 建议使用getApplicationContext()来获取 App 的 Context 传入,如下:
Toast toast = Toast.makeText(getApplicationContext(),"MYBJ Android Study",Toast.LENGTH_LONG);
  1. 调用 Toast 的show()方法
toast.show();

我们可以将以上两句串联起来,如下:

Toast.makeText(getApplicationContext(),"MYBJ Android Study",Toast.LENGTH_LONG).show();

3. 设置 Toast 在屏幕中的位置

按照第 2 小节的方式 show 出来的 Toast 默认会在屏幕的底部中间位置展示,如果想要不走寻常路,可以通过接口setGravity(int gravity, int x, int y)改变 Toast 展示的位置,参数如下:

  • int gravity:
    第一个参数表示重心,和 Layout 里面的 gravity 类似,我们可以直接使用 Gravity.java 类里面的常量来设置。有以下四种可选项:
    • Gravity.BOTTOM
    • Gravity.RIGHT
    • Gravity.LEFT
    • Gravity.TOP

当然我们也可以同时设置两个值,中间用“|”隔开,如Gravity.TOP|Gravity.LEFT表示左上方向。

  • int x:
    设置水平方向上的距离,这个距离的参照是左边还是右边依赖第一个参数gravity
  • int y:
    设置垂直方向上的距离,这个距离的参照是顶部还是底部依赖于第一个参数gravity的设置

如果设置 gravity 为 Gravity.CENTER,x 为 100,y 为 200。那么最后 show 出来的示意图如下:

4. Toast 的使用示例

本节我们用 Toast 实现一个“农药”提示,有两个 Button,点击会触发一个短暂的消息提示。代码比较简单,首先在布局中加入两个 Button:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"android:layout_width="match_parent"android:padding="10dp"android:layout_height="match_parent"android:orientation="vertical"><Buttonandroid:id="@+id/dont_wave"android:layout_width="wrap_content"android:layout_height="wrap_content"android:text="猥琐发育,别浪" /><Buttonandroid:id="@+id/hold_on_we_can_win"android:layout_width="wrap_content"android:layout_height="wrap_content"android:text="稳住,我们能赢" />
</LinearLayout>

接着在 Java 代码中注册监听器,在点击不同 Button 的时候弹出不同的 Toast 提示信息:


package com.emercy.myapplication;import android.app.Activity;
import android.os.Bundle;
import android.view.Gravity;
import android.view.LayoutInflater;
import android.view.View;
import android.widget.LinearLayout;
import android.widget.TextView;
import android.widget.Toast;public class MainActivity extends Activity implements View.OnClickListener {@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);findViewById(R.id.dont_wave).setOnClickListener(this);findViewById(R.id.hold_on_we_can_win).setOnClickListener(this);}@Overridepublic void onClick(View v) {showToast(((TextView) v).getText().toString());}private void showToast(String text) {LinearLayout layout = (LinearLayout) LayoutInflater.from(this).inflate(R.layout.toast, null);TextView textView = layout.findViewById(R.id.text);textView.setText(text);Toast toast = new Toast(this);toast.setView(layout);toast.setDuration(Toast.LENGTH_SHORT);toast.setGravity(Gravity.TOP, 0, 500);toast.show();}
}

可以看到在创建 Toast 之后,通过setView方法设置了一个 LinearLayout 类型的 View 对象。通过这种方式就可以自定义一个展示样式,最后编写 Toast 的布局样式代码:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"android:layout_width="match_parent"android:gravity="bottom"android:layout_height="match_parent"android:orientation="horizontal"><ImageViewandroid:layout_width="50dp"android:layout_height="50dp"android:src="@mipmap/mc" /><TextViewandroid:id="@+id/text"android:layout_marginLeft="10dp"android:layout_width="wrap_content"android:layout_height="wrap_content"android:textSize="30sp" />
</LinearLayout>

XML 文件中我们横向放置了一个图片和一个文本,对应的是游戏人物和提示语,然后在点击的时候弹出此样式的 Toast。最终编译运行效果如下:

Toast 示例

5. 小结

本节我们学习了一种简单的消息提示方式,它适合于一些简短且不是太重要的消息,大多数情况下我们可以直接用静态方法makeText来创建一个 Toast,但是在一些特定场景下我们也可以通过 API 设置它的边界等样式,或者直接自定义一个 xml 布局让它完全按自己的样式去展示。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/125.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

糖尿病可能是一团虚火,肝肾同源,肝阴不足。

其实对于很多的糖尿病患者来说&#xff0c;他的问题本质可能是一团虚火&#xff0c;就拿前段时间我的门诊一个患者为例&#xff0c;之前患有高血压&#xff0c;总是眩晕烦躁&#xff0c;常常失眠&#xff0c;大概近四个月出现多饮、多尿怎么喝水也不解渴&#xff0c;经过检查确…

CSS导读 (CSS的三大特性 上)

&#xff08;大家好&#xff0c;今天我们将继续来学习CSS的相关知识&#xff0c;大家可以在评论区进行互动答疑哦~加油&#xff01;&#x1f495;&#xff09; 目录 五、CSS的三大特性 5.1 层叠性 5.2 继承性 5.2.1 行高的继承 5.3 优先级 小练习 五、CSS的三大特性 …

IDEA中SVN 的使用

文章目录 前言一、svn安装二、IDEA集成SVN总结 前言 svn可以老牌的代码仓库了 说实话svn还是和git无法相比的,毕竟git有本地仓库的概念,可以很好的处理冲突,然而svn是没有本地仓库的概念的,所以只能拉取别人的代码,然后处理冲突后,才能提交代码; 由于最近的工作换成了用svn仓…

2024香港Web3嘉年华:Web3的两大支柱是区块链和AI

2024香港Web3嘉年华&#xff1a;Web3的两大支柱是区块链和AI 4月9日&#xff0c;香港Web3嘉年华落下帷幕圆满收官。这场盛会延续了往年的火爆&#xff0c;保留了社交和打卡元素。大批加密货币从业者齐聚一堂&#xff0c;在多方碰撞中&#xff0c;共同探讨香港与加密的未来之路…

三种空间数据的聚合算法

原始数据分布 给老外做的Demo&#xff0c;所以是英文界面。 原始数据分布情况如下&#xff1a; geojson文本内容&#xff1a; 三种方法基本原理 三种聚合算法来做一个例子&#xff08;500条记录&#xff09;。 方法1&#xff1a;按Ol默认方法进行聚类&#xff0c;使用Open…

可见光相机曝光方式

可见光摄影中的曝光方式主要包括两种&#xff1a;卷帘曝光和全局曝光。它们之间的区别在于曝光过程中传感器或胶片感光部分的工作方式不同&#xff0c;这直接影响到图像捕获的效果和特性。 卷帘曝光&#xff08;Rolling Shutter&#xff09;&#xff1a; 工作原理&#xff1a;在…

对一个全局变量进行多线程并发 -- 或者 ++ 操作是否是安全的??是否是原子的??

1.结论&#xff1a; 不是安全的&#xff0c;不是原子的 2.原因&#xff1a; 2.1 不是原子性的原因&#xff1a; 一个线程将一个全局变量--&#xff08;减减&#xff09;时候&#xff0c;需要以下几个步骤 第一步&#xff1a;将全局变量读到cpu的寄存器中&#xff0c; 第二步…

3D目标检测实用技巧(三)- 生成虚拟点

一、引言 本次参考的是VirConv生成虚拟点的方法&#xff1a; VirConv/tools/PENet at master hailanyi/VirConv GitHubVirtual Sparse Convolution for Multimodal 3D Object Detection - VirConv/tools/PENet at master hailanyi/VirConvhttps://github.com/hailanyi/Vir…

腾讯文档推出智能白板创新品类,自研开物引擎支持全端应用

4月18日&#xff0c;“腾讯文档&#xff0c;打开想象”2024产品发布会在线上举办。腾讯社交协作产品部总经理、腾讯文档负责人鄢贤卿在会上&#xff0c;正式发布智能白板创新品类、双核编辑“开物引擎”、云加端解决方案等产品矩阵。他表示&#xff0c;在自研文档品类和自研双核…

ctfshow web入门 SQl注入web171--web179

从这里开始SQl建议大家去看这篇文章学习一下先 MySQl web171 法一联合查询 题目 $sql "select username,password from user where username !flag and id ".$_GET[id]." limit 1;";爆数据库名 -1 union select 1,database(),3 -- 爆表名 -1 union s…

数据结构 - 栈

概述 计算机科学中,stack是一种线性的数据结构,只能在其一段添加和移除数据. 习惯来说,这一端称之为栈顶,另一端不能操作数据的称之为栈底,就如同生活中的一摞书 先提供一个接口: public interface Stack <E>{/*** 向栈顶压入元素* param value -- 待压入值* returns…

✌粤嵌—2024/4/18—旋转链表✌

代码实现&#xff1a; 方法一&#xff1a;在原链表中找到旋转之后的首尾&#xff0c;改变指向 /*** Definition for singly-linked list.* struct ListNode {* int val;* struct ListNode *next;* };*/ struct ListNode* rotateRight(struct ListNode *head, int k) {i…

线程安全问题的原因和解决方案

目录 原因分析 解决线程安全问题——加锁 synchroized&#xff08;&#xff09; 死锁 死锁的四个必要条件 线程安全是指多个线程同时访问共享资源时&#xff0c;不会产生不正确的结果。线程安全问题的主要原因是多个线程对共享数据进行读写操作时的并发性。这可能导致竞态…

制作直通网线和交叉网线

制作直通网线和交叉网线 1. 网络直通线2. 网络交叉线References 双绞线的连接方法有两种&#xff1a;直通连接和交叉连接 。 直通连接是将双绞线的两端分别都依次按白橙、橙、白绿、蓝、白蓝、绿、白棕、棕色的顺序 (国际 EIA/TIA 568B 标准) 压入 RJ45 水晶头内。这种方法制作…

壁纸、软件、电子书、音乐资源、数据库资源,囤一囤

资源网站我真的有很多&#xff01;&#xff01;下面这十几个都是壁纸资源、软件资源、电子书资源、音乐资源、数据库资源等等&#xff0c;感兴趣的囤一囤&#xff01; 一、壁纸资源 1、PEXELS 网址&#xff1a; https://www.pexels.com/zh-cn/ 一个专门分享无版权图片的网站…

Windows突然蓝屏解决办法

Windows突然蓝屏&#xff0c;然后重复开机没有用&#xff0c;但是能进入bios系统&#xff0c;证明内存和磁盘没事&#xff0c;用大白菜制作了PE系统盘制作过程&#xff08;之前一直都是用官方镜像制作&#xff0c;但是发现用大白菜制作可以对系统之前的磁盘里面重要的信息拷贝到…

Python用于比较数据结构并生成差异报告的工具库之data-diff使用详解

概要 Python的data-diff库是一个用于比较数据结构并生成差异报告的工具。它可以处理各种数据类型,如字典、列表、集合等,使得开发者能够快速识别数据之间的差异。 安装 通过pip可以轻松安装data-diff: pip install data-diff特性 支持多种数据类型:能够比较字典、列表、…

tokio 学习

Rust Async 异步编程 简易教程 理解tokio核心(1): runtime Rust 中的异步编程 Rust 中的 async 和线程 OS 线程&#xff1a; 适用于少量任务&#xff0c;有内存和 CPU 开销&#xff0c;且线程生成和线程间切换非常昂贵线程池可以降低一些成本允许重用同步代码&#xff0c;…

新手做抖音小店,最易爆单的几大类目分享,抓紧收藏!

大家好&#xff0c;我是电商糖果 新手做抖店没有经验&#xff0c;不了解市场&#xff0c;很多人都担心类目选错了&#xff0c;很难起店。 毕竟电商行业有一句话&#xff0c;类目大于一切&#xff0c;选择大于努力。 类目没有选对&#xff0c;再折腾也没用。 糖果做抖音小店…

eclipse配置SVN和Maven插件

3、 安装SVN插件 使用如下方法安装 Help–Install New Software 注意&#xff1a;目前只能安装1.8.x这个版本的SVN&#xff0c;如果使用高版本的SVN&#xff0c;在安装SVN和maven整合插件的时候就会报错&#xff0c;这应该是插件的bug。 点击Add name: subclipse location…