android custom toast,Android自定义Toast

核心代码:

package com.huatec.myapplication;

import android.content.Context;

import android.graphics.Bitmap;

import android.support.annotation.ColorInt;

import android.support.annotation.DrawableRes;

import android.view.Gravity;

import android.view.LayoutInflater;

import android.view.View;

import android.widget.ImageView;

import android.widget.TextView;

import android.widget.Toast;

/**

* 自定义吐司

*/

public final class MyToast {

public final Toast toast;//Toast对象

public final View view;//Toast的UI效果

public final ImageView icon;//图标

public final TextView message;//内容

public MyToast(Context context) {

toast = new Toast(context);

view = LayoutInflater.from(context).inflate(R.layout.toast_layout, null);

icon = view.findViewById(R.id.toast_icon);

message = view.findViewById(R.id.toast_message);

}

/**

* 显示

*/

public void show() {

this.toast.show();

}

public static class Builder {

private Bitmap icon;//图标图片

// private int iconID = R.mipmap.ic_launcher;//图标资源ID

private int iconID;//

private String message;//内容

private int backgroundColor = 0x56000000;//背景颜色

private Context mContext;//上下文

private int duration = Toast.LENGTH_SHORT;//设置时间

private MyToast mine;

private int gravity = Gravity.NO_GRAVITY;//设置位置

private int offsetX = 0;//设置偏移度X

private int offsetY = 0;//设置偏移度Y

private boolean isShowIcon;//是否显示图标

public Builder(Context context) {

this.mContext = context;

}

/**

* 设置ICON

*

* @param bitmap

* @return

*/

public Builder setIcon(Bitmap bitmap) {

this.icon = bitmap;

return this;

}

public Builder setIcon(@DrawableRes int resId) {

this.iconID = resId;

return this;

}

public Builder showIcon(boolean showIcon) {

this.isShowIcon = showIcon;

return this;

}

/**

* 设置内容

*/

public Builder setMessage(String hintMessage) {

this.message = hintMessage;

return this;

}

/**

* 设置吐司时长

*/

public Builder setDuration(int type) {

this.duration = type;

return this;

}

/**

* 设置背景

*/

public Builder setBackgroundColor(@ColorInt int color) {

this.backgroundColor = color;

return this;

}

/**

* 设置位置

*/

public Builder setGravity(int gravity) {

this.gravity = gravity;

return this;

}

/**

* 偏移量

*/

public Builder setOffsetX(int x) {

this.offsetX = x;

return this;

}

public Builder setOffsetY(int y) {

this.offsetY = y;

return this;

}

/**

* 创建MyToast对象

*/

public MyToast build() {

if (null == mine) {

mine = new MyToast(mContext);//创建对象

}

if (isShowIcon) {

//隐藏图标

mine.icon.setVisibility(View.VISIBLE);

if (null != icon) {//判断是否显示图标

mine.icon.setImageBitmap(icon);//设置图片

} else if (iconID != 0) {

//设置图片

mine.icon.setBackgroundResource(iconID);

}

}

if (!message.isEmpty()) {//判断内容是否为空

mine.message.setText(message);

} else {

mine.message.setText("");

}

//设置背景

mine.view.setBackground(new BackgroundDrawable(backgroundColor, mContext));

//mine.message.setTextColor(Color.BLACK);//设置字体颜色

mine.toast.setDuration(duration);//设置时长

mine.toast.setView(mine.view);//添加自定义效果

mine.toast.setGravity(gravity, offsetX, offsetY);//设置偏移量

return mine;

}

}

}

toast_layout.xml布局文件:

android:orientation="horizontal" android:layout_width="wrap_content"

android:layout_height="wrap_content"

android:paddingLeft="10dp"

android:paddingRight="10dp"

android:paddingTop="5dp"

android:paddingBottom="5dp">

android:id="@+id/toast_icon"

android:visibility="gone"

android:layout_width="wrap_content"

android:layout_height="wrap_content" />

android:id="@+id/toast_message"

android:layout_width="wrap_content"

android:layout_height="wrap_content"

android:layout_margin="5dp"

android:textColor="#ffffff"

android:textSize="16sp"

android:layout_gravity="center_vertical"/>

BackgroundDrawable.java背景:

package com.huatec.myapplication;

import android.annotation.TargetApi;

import android.content.Context;

import android.graphics.Canvas;

import android.graphics.ColorFilter;

import android.graphics.Paint;

import android.graphics.PixelFormat;

import android.graphics.drawable.Drawable;

import android.os.Build;

import android.support.annotation.ColorInt;

import android.util.TypedValue;

public class BackgroundDrawable extends Drawable{

private Paint paint;

private Context mContext;

public BackgroundDrawable(@ColorInt int color,Context context) {

mContext = context.getApplicationContext();

paint = new Paint(Paint.ANTI_ALIAS_FLAG);

paint.setColor(color);

paint.setDither(true);

paint.setStyle(Paint.Style.FILL);

}

@TargetApi(Build.VERSION_CODES.LOLLIPOP)

@Override

public void draw(Canvas canvas) {

int width = canvas.getWidth();

int height = canvas.getHeight();

canvas.drawRoundRect(0,0,width,height,dp2px(20),dp2px(20),paint);

}

@Override

public void setAlpha(int alpha) {

paint.setAlpha(alpha);

}

@Override

public void setColorFilter(ColorFilter colorFilter) {

paint.setColorFilter(colorFilter);

}

@Override

public int getOpacity() {

return PixelFormat.TRANSLUCENT;

}

private int dp2px(int values){

return (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP,values,

mContext.getResources().getDisplayMetrics());

}

}

使用Toast:

package com.huatec.myapplication;

import android.os.Bundle;

import android.support.v7.app.AppCompatActivity;

import android.view.Gravity;

import android.view.View;

import android.widget.Button;

public class MainActivity extends AppCompatActivity {

private Button hintToast1;

private Button hintToast2;

@Override

protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.activity_main);

hintToast1 = findViewById(R.id.hint_toast);

hintToast2 = findViewById(R.id.hint_toast2);

//按钮1

hintToast1.setOnClickListener(new View.OnClickListener() {

@Override

public void onClick(View v) {

new MyToast.Builder(MainActivity.this)

.setMessage("你好吗?")//设置提示文字

.setBackgroundColor(0x88ff4587)//设置背景颜色

.setGravity(Gravity.CENTER)//设置吐司位置

.build()//创建吐司

.show();

}

});

//按钮2

hintToast2.setOnClickListener(new View.OnClickListener() {

@Override

public void onClick(View v) {

new MyToast.Builder(MainActivity.this)

.setMessage("你好吗?")

.setBackgroundColor(0x88ff4587)

.setGravity(Gravity.CENTER)

.setIcon(R.mipmap.ic_launcher)//设置图标

.showIcon(true)//是否显示图标

.build()

.show();

}

});

}

}

效果图:

51b4e9d0cf8f

2018-05-20 18_42_30.gif

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

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

相关文章

华为android打开usb调试模式,华为 PE-CL00 开启USB调试模式

我们要将华为 PE-CL00与电脑进行连接,就必须要打开华为 PE-CL00系统的调试模式,不同的系统版本打开调试模式的方法有所不同,在这里我们就谈谈华为 PE-CL00各种系统版本打开USB调试模式的方法。1、针对Android 2.1-2.2版本的系统:我…

API网关和AWS Lambda进行身份验证

当Foreach最初涉足微服务领域时,我们并没有真正构建微服务。 我们以为我们做到了,但是我们所有的服务中总存在一些逻辑。 当然,每个服务实际上应该只专注于自己的任务,而不应该专注于属于另一个微服务的事物。 我们这方面最明显的…

魅蓝x android 7,魅蓝x2什么时候发布 魅蓝x2发布时间最新消息

日前,魅蓝品牌掌门人李楠或kkk便在微博上放出“bluegate(蓝色大门)”这样一个句子,似乎暗示魅蓝品牌或在近期会有动作,并且由于该条微博的尾巴显示为“下款魅蓝Android”,所以在不少网友看来,或许预示着魅蓝将有新机即…

内存泄漏代码_调查内存泄漏第1部分–编写泄漏代码

内存泄漏代码前几天,我发现了这个小问题:该服务器运行了一段时间,然后掉下来了。 然后通过启动脚本重新启动,整个过程重复进行。 听起来并没有什么坏处,因为它虽然对数据造成了重大损失,但对业务的重要性并…

Java整数缓存-为什么Integer.valueOf(127)== Integer.valueOf(127)为True

在一次采访中,我的一个朋友被问到如果我们有两个Integer对象, Integer a 127; Integer b 127; Integer a 127; Integer b 127; 为什么当a b都持有两个单独的对象时,其值为true ? 在本文中,我将尝试回答这个问题&a…

怎么删除计算机管理员用户密码,小编手把手教你Win10系统如何删除管理员账户密码...

一位用户反馈自己在windows10正式版系统电脑中设置了管理员账户密码,之后每次开机都需要输入密码才可以登录,感觉十分麻烦。那么,Win10系统下该如何删除管理员账户密码?接下来,系统之家小编就为大家分享下具体操作方法…

Hibernate事实:始终检查Criteria API SQL查询

Criteria API对于动态构建查询非常有用,但这是我使用它的唯一用例。 每当您有一个带有N个过滤器且可以以任意M个组合到达的UI时,就应该有一个API动态地构造查询,因为连接字符串始终是我所不愿使用的路径。 问题是,您是否知道您的…

以Spring方式构建企业Java应用程序

我认为可以肯定地说, Java EE在Java开发人员中享有很高的声誉。 尽管多年来确实在各个方面都有所改善,甚至将其改名为Eclipse Foundation成为Jakarta EE ,但其苦味仍然相当浓厚。 另一方面,我们拥有Spring框架 (或者为…

jaxb 映射 空字段_推土机:将JAXB对象映射到业务/域对象

jaxb 映射 空字段Dozer是开放源代码( Apache 2许可 )“ Java Bean到Java Bean映射器,可将数据从一个对象递归复制到另一个对象”。 正如从其主页上的描述所描述的那样,它用于映射两个JavaBeans实例,以在实例之间进行自…

常用计算机网络性能指标的是什么,什么是Bit?【计算机网络的性能指标】

比特(英语:Bit),亦称二进制位,指二进制中的一位,是信息的最小单位。因此一个比特就是二进制数字中的一个 1 或 0Bit是Binary digit(二进制数字)的缩写,由数学家John Wilder Tukey提出(可能是1946年提出,但有…

使用AWS Lambda在Go中构建RESTful API

在本文中,我们将学习使用AWS Lambda在Go中设计,构建和部署RESTful API。 在开始之前,让我给您简要介绍一下AWS Lambda。 什么是AWS Lambda? AWS Lambda是一种无服务器计算服务,可运行我们的代码以响应事件并自动为我…

undertow服务器分析_使用undertow构建和测试Websocket服务器

undertow服务器分析即将发布的JBoss Application Server版本将不再使用Tomcat作为集成的Web服务器,而是将其替换为undertow 。 undertow的体系结构基于可通过Builder API动态添加到服务器的处理程序。 这种方法类似于在Node.js中构造Web服务器的方式。 它使开发人员…

湖北农商行计算机类笔试,2018湖北农商行招聘考试面试考多少分,才能进笔试?...

原标题:2018湖北农商行招聘考试面试考多少分,才能进笔试?昨天,湖北农商行各地农商行面试分数线陆续出来了,恭喜过线的小伙伴,你们顺利的进入了笔试阶段,接下来小编给大家说一下各地的进笔试的分…

计算机共享原理,synchronize底层原理 游戏电脑问题解决分享!

sync1 package com.paddx.test.concurrent;23 public class SynchronizedDemo {4 public void method() {5 synchronized (this) {6 System.out.println("Method 1 start&quot😉;7 }8 }9 }反编译结果:关于这两条指令的作用,我们直接…

单元测试反模式,完整列表

我前段时间写过有关OOP中的反模式的文章 。 现在该写单元测试反模式了,因为它们也存在,并且有很多。 我将尝试在列表中包括我知道的每个示例。 如果您认识其他任何人,请通过请求请求将其添加,或在下面发表评论。 对于每个反模式&a…

功能Java示例 第6部分–用作参数

这是称为“ Functional Java by Example”的系列文章的第6部分。 我在本系列的每个部分中发展的示例是某种“提要处理程序”,用于处理文档。 在前面的部分,我们试图通过移动尽可能多的副作用,如IO,该系统的外部,以使我…

系统属性的JDK 12 Javadoc标记

JDK 12 Early Access Build 20 ( 2018/11/15 )可用,可以用来试用新的Javadoc标签{systemProperty} 。 新的{systemProperty} Javadoc标记在core-libs-dev邮件列表消息“ FYI:用于文档系统属性的新javadoc标记 ”中进行了讨论&…

功能Java示例 第5部分–将I / O移到外部

这是称为“ Functional Java by Example”的系列文章的第5部分。 在上一部分中,我们停止了对文档的变异,并返回了数据的副本。 现在,我们需要移走一些I / O。 如果您是第一次来,最好是从头开始阅读。 它有助于了解我们从何处开始…

实现打包后修改服务器接口地址,vue打包之后生成一个配置文件修改接口

我们的vue代码打包上传到服务器之后,生成一个配置文件,里面可以配置域名或其它什么字段之类的,这样以后换了域名,只修改这个配置文件即可。第一步:安装generate-asset-webpack-plugin插件npm install --save-dev gener…

我的世界无人维护的服务器,我的世界:如何进入9年无人管理的2B2T?全球最大战争服务器!...

原标题:我的世界:如何进入9年无人管理的2B2T?全球最大战争服务器!2b2t因混乱和9年无人管理而闻名于世,目前是全球最大的《我的世界》战争服务器,同时又是第二大Minecraft古老的服务器。​最近很多小伙伴都在…