安卓 自定义吐司样式 ,适配Android Pie
大家都知道, 在安卓中, 有一个提醒用户的弹幕 , 就是吐司, 用来提示用户一些信息, 但是安卓中默认的吐司 样式太暗淡了, 好多小伙伴不喜欢,今天, 就带着大家一起打造个性化的吐司弹幕, Android Pie 中已经修复了吐司重复弹出的bug,所以针对9.0及以上的设备,不需要再使用静态吐司了... ,开始今天的代码
package com.ginkodrop.ihome.util;import android.app.Activity;
import android.content.Context;
import android.graphics.Color;
import android.os.Build;
import android.support.design.widget.Snackbar;
import android.support.v4.app.NotificationManagerCompat;
import android.util.TypedValue;
import android.view.Gravity;
import android.view.LayoutInflater;
import android.view.View;
import android.widget.TextView;
import android.widget.Toast;import com.ginkodrop.ihome.R;/*** Android Pie 中已经修复了吐司重复弹出的bug,* 所以针对9.0及以上的设备,不需要再使用静态吐司了*/
public class ToastUtil {private static TextView mTextView;private static Toast toastStart;private static TextView snackbarTextView;private static TextView snackbarActionView;public static void showToast(Activity activity, String message) {if (!Utils.isTopActivity(activity)) return;if (!isNotifyEnable(activity)) {//如果通知权限被关闭,就是用替代方案showSnackBar(activity, message);return;}//加载Toast布局View toastRoot = LayoutInflater.from(activity).inflate(R.layout.toast, null);//初始化布局控件mTextView = (TextView) toastRoot.findViewById(R.id.message);if (Build.VERSION.SDK_INT > Build.VERSION_CODES.O_MR1) {toastStart = new Toast(activity);} else {if (toastStart == null) {toastStart = new Toast(activity);}}mTextView.setText(message);//获取屏幕高度int height = activity.getResources().getDisplayMetrics().heightPixels;//Toast的Y坐标是屏幕高度的1/3toastStart.setGravity(Gravity.TOP, 0, (int) (height * 0.66));toastStart.setDuration(Toast.LENGTH_LONG);toastStart.setView(toastRoot);toastStart.show();}@SuppressWarnings("deprecation")public static void showToast(Activity activity, int message) {if (!Utils.isTopActivity(activity)) return;if (!isNotifyEnable(activity)) {showSnackBar(activity, activity.getString(message));return;}View toastRoot = LayoutInflater.from(activity).inflate(R.layout.toast, null);mTextView = (TextView) toastRoot.findViewById(R.id.message);if (Build.VERSION.SDK_INT > Build.VERSION_CODES.O_MR1) {toastStart = new Toast(activity);} else {if (toastStart == null) {toastStart = new Toast(activity);}}mTextView.setText(activity.getResources().getString(message));//获取屏幕高度int height = activity.getResources().getDisplayMetrics().heightPixels;//Toast的Y坐标是屏幕高度的1/3toastStart.setGravity(Gravity.TOP, 0, (int) (height * 0.66));toastStart.setDuration(Toast.LENGTH_LONG);toastStart.setView(toastRoot);toastStart.show();}//如果通知权限被关闭,就是用替代方案public static void showSnackBar(Activity activity, String message) {final Snackbar snackbar = Snackbar.make(activity.findViewById(android.R.id.content), message, Snackbar.LENGTH_SHORT);snackbar.addCallback(new Snackbar.Callback() {@Overridepublic void onShown(Snackbar sb) {super.onShown(sb);}@Overridepublic void onDismissed(Snackbar transientBottomBar, int event) {super.onDismissed(transientBottomBar, event);}}).setAction("关闭", new View.OnClickListener() {@Overridepublic void onClick(View v) {snackbar.dismiss();}});snackbarTextView = (TextView) snackbar.getView().findViewById(android.support.design.R.id.snackbar_text);snackbarActionView = (TextView) snackbar.getView().findViewById(android.support.design.R.id.snackbar_action);snackbarTextView.setTextSize(TypedValue.COMPLEX_UNIT_DIP, 14);snackbarActionView.setTextSize(TypedValue.COMPLEX_UNIT_DIP, 14);snackbarActionView.setTextColor(Color.WHITE);snackbarTextView.setText(message);snackbar.show();}private static boolean isNotifyEnable(Context context) {return NotificationManagerCompat.from(context).areNotificationsEnabled();}
}
下面是吐司现实的布局 item_toast_bg.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"android:layout_width="match_parent"android:layout_height="match_parent"android:orientation="vertical"><TextViewandroid:id="@+id/tv_toast_text"android:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_gravity="center"android:background="@drawable/yellow_round_bg"android:gravity="center"android:paddingBottom="8dp"android:paddingLeft="30dp"android:paddingRight="30dp"android:paddingTop="8dp"android:textColor="@color/green" /></LinearLayout>
安卓 自定义吐司样式 ,适配Android Pie相关推荐
- 安卓自定义下拉列表样式_自定义下拉列表样式
安卓自定义下拉列表样式 View demo 查看演示 Download Source
- 小程序篇 - uni-app自定义标题栏样式适配问题
我们自定义标题栏先要设置 navigationStyle: 'custom' 设置过后只会保留胶囊 其他的可以自由发挥咯 json "pages": [{"path&qu ...
- android notification设置不同字体颜色,Android Notification自定义通知样式你要知道的事...
本文将根据个人经验对Notification做个总结,以供参考! 什么是通知(Notification) 通知是一个可以在应用程序正常的用户界面之外显示给用户的消息. 通知发出时,它首先出现在状态栏的 ...
- 安卓学习专栏——安卓报错Version 28 (intended for Android Pie and below) is the last version of the legacy suppor
步骤 系列文章 前言 1.报错效果 2.修改方法 总结 系列文章 提示:转到安卓学习专栏,观看更多内容! 点我直达–>安卓学习专栏 前言 'com.android.support:appcomp ...
- Android自定义按钮样式
安卓系统自带的按钮样式很不好看,满足不了感官需求,如何自定义一个自己需要的按钮样式呢? 分三步来介绍: 1.自定义按钮背景样式,在res/drawable/目录下新建bg_btn.xml文件. < ...
- Google Android Pie,谷歌安卓9.0正式版发布,定名Android Pie
作者: 张良 2018-08-07/10:04 驱动中国8月7日消息 今日,谷歌发布安卓9正式版,依照甜品系列定名为Android Pie,谷歌Pixel系列机型已正式推送该版本,其他安卓旗舰将于 ...
- android 显示状态栏广播,安卓8.0样式音乐状态栏下载-Android O样式音乐状态栏(media notification)下载v1.0.4 安卓版-西西软件下载...
Android O样式音乐状态栏是一款可以将你的手机的下拉通知中心的音乐样式变成Android O(安卓8.0)那样的样式的软件,看到安卓8.0下拉通知中的音乐同时就觉得非常漂亮,但是不是每一款手机都 ...
- 谷歌发布最新版安卓Android,谷歌发布安卓 9 正式版,代号 Android Pie
爱搞机 8 月 7 日消息,据外媒报道,北京时间今日凌晨,谷歌开始向用户推送安卓 Android Pie 正式版,除了确定新系统的代号为 Pie(派)之外,谷歌还将原本的安卓 9.0 称作 Andro ...
- android中自定义 toast,android 自定义Toast样式和显示方式
问题: 1.android 开发中如果不停的触发显示Toast,会造成Toast一个接一个的弹出,非常影响用户体验. 2.android设备有千万个,每个设备的Toast的背景有可能不一样,造成在应用 ...
最新文章
- PS修改过图片上传服务器,富文本编辑器图片上传base64存数据库改为服务器图片路径...
- C++ Primer 5th笔记(chap 17 标准库特殊设施)随机数发生器种子( seed)
- 看看老外是如何理解抽象类的
- iKcamp|基于Koa2搭建Node.js实战(含视频)☞ 记录日志
- gerrit权限控制
- httpunit测试遭遇org.mozilla.javascript.NativeGlobal.constructError
- led伏安特性实验误差分析_伏安法测量误差分析-北京新东方
- 下载VS(visualstudio)2019官方网站详解
- fastlane:构建、测试和发布 React Native 应用程序
- Games101课程笔记_lecture20_color颜色
- 扫地机器人漫谈(一):扫地机的形状
- Xcode 常用编译选项设置【推荐】
- Linux②—概述与基本命令,springboot微信点餐系统百度云
- 伽罗华域(Galois Field)有限域元素生成和运算原理
- 从计数器逻辑中揭秘神奇的HDL
- 基于Netty的聊天系统(三)协议定制----消息篇
- lua中 高效判断数组(table)中是否存在某个字符 值
- 【MIKE水动力】MIKE11基本原理
- Java中long类型直接赋值大数字的问题
- 基于vue 在平面图上画路线图 canvas