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,一经查实,立即删除!

相关文章

【渝粤题库】广东开放大学 大学英语B 形成性考核 (2)

选择题 题目: Do you still get free plastic bags from the supermarkets? Things have changed. China has banned free plastic bags at shops and supermarkets, and people have to pay for using plastic bags. The rule started on June 1. It came becaus…

apache camel_在WildFly中将Apache Camel和Spring添加为jboss模块

apache camel这些天,我在玩Wildfly , Apache Camel和Spring 。 在EAR / WAR之间进行通信的一种简单方法是使用Camel的direct-vm组件。 有或没有骆驼,有很多方法可以实现这一目标。 骆驼在WildFly中就像一个饰物,不需要任何额外的…

国家开放大学2021春1129土木工程力学(本)题目

教育 教育 试卷代号: 1129 2021年春季学期期末统一考试 土木工程力学(本) 试题 2021年7月 一、单项选择题(每小题3分,共30.分。在所列备选项中,选1项正确的或最好的作为答案填入括弧) 1.求图示…

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

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

国家开放大学2021春1044合同法题目

教育 教育 试卷代号: 1044 2021年春季学期期末统一考试 合同法 试题 2021年7月 注意事项 一、将你的学号、姓名及分校(工作站)名称填写在答题纸的规定栏内。考试结束后,把试卷和答题纸放在桌上。试卷和答题纸均不得带出考场。监…

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

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

【渝粤教育】广东开放大学 企业项目报表分析 形成性考核 (35)

题库查询系统 选择题 题目:流动债的流动性分析主要从流动负债的到期日流动负债的推迟可能性两方面进行。 答案: A、正确 题目:营业利润是以主营业务利润为基础加上其他业务利润减去销售费用、管理费用和财务费用,再加上营业外收入减去营业外支…

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

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

【渝粤教育】广东开放大学 数据库原理与应用 形成性考核 (1)

题库查询系统 选择题 题目:数据库系统是采用了数据库技术的计算机系统,它是一个集合体,包含数据库、计算机硬件、软件和( ) 答案: A、数据库管理员 题目:数据库(DB)&am…

Android 21mod,熊猫博士小镇合集 Mod

游戏介绍打通30个独具特色的区域界限,探索并发掘各式各样的奇妙冒险!开启乐趣无限的冒险!想成为一名维护正义的警察,或经营一间自己的美发沙龙,或成为一名救治动物的兽医?在熊猫博士小镇中,一切…

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

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

【渝粤教育】广东开放大学 广东开放大学学习指引 形成性考核 (28)

题库查询系统 选择题 题目:在开放大学的学习中认识同学可以增强开放大学学生间的交流与友情,促进学生对开放大学的归属感与认同感,克服学习中的孤独感。 答案: A、“对”。 题目:广东开放大学服务于广东学习型社会&…

【渝粤教育】广东开放大学 法理学 形成性考核 (46)

题库查询系统 选择题 题目:法理学与部门法的关系是( )的关系。 答案: A、理论与实际 B、 一般与特殊 C、 整体与局部 D、论与史 题目:法的最终决定因素是()。 答案: A、阶级斗争状况…

android 打印kernel log,android8.0 kernel4.9.44 各层log打开

一.问题平台android8.0 kernel4.9.44,想加个i2c驱动,打开log都是一件脑瓜疼的事。二.log总结android有三种log。1.kernel下面的,就是driver层log。2.kernel上面的,init和init.rc启动的程序的log,应用层3.kernel上面的&…

【渝粤教育】广东开放大学 网络完全与技术 形成性考核 (44)

题库查询系统 选择题 题目:以下哪个不属于数字签名的功能( ) 答案: A、不可伪造的 B、可重用的 C、可信的 D、不可抵赖的 题目:前缀为Worm的病毒是( ) 答案: A、蠕虫病毒 B、后门病毒 C、杩 D、脚本病毒 题目:下面关于…

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…

【渝粤教育】广东开放大学 中国法律史 形成性考核 (31)

题库查询系统 选择题 题目:春秋时期在晋国铸刑鼎的是 答案: A、赵鞅 题目:汉代的买卖契约叫做 答案: A、券书 题目:西周法官在审判中判断当事人陈述真伪的方式叫做 答案: A、“五听” 题目:明朝…

高鸿股份与鸿蒙,高鸿股份(000851)个股分析_牛叉诊股_同花顺财经

资金净流入资金净流出行业平均线[{"date":"2021-04-14","value":"1028.65","field":null},{"date":"2021-04-15","value":"213.51","field":null},{"date":&q…

【渝粤教育】广东开放大学 会展项目管理 形成性考核 (59)

题库查询系统 选择题 题目:为了确保项目团队和其他项目干系人完全理解并且投入到项目,目标必须是? 答案: A、现实的和可达到的 题目:在一定的组织里,一个项目一般不会正式启动,除非完成了&#…

【渝粤教育】广东开放大学 原画设计 形成性考核 (23)

题库查询系统 选择题 题目:在图层蒙版里用黑色画笔涂抹,可以遮盖住图层内相对应位置的图像信息 答案: A、正确 题目:图层样式描边的描边是根据选区边缘或路径来做描边的 答案: A、正确 题目:魔术橡皮擦工具…