遇到这种分析用什么实现的,肯定要祭出大杀器Android Device Monitor(AS在Tools->Android)
打开之后,选中连接的设备,然后点击小手机图标,即可导出UI层次图。
咱们来看下淘宝通知的UI层次图。
<img src="https://pic4.zhimg.com/08df4fad3cede85e28c121e820be7aff_b.png" data-rawwidth="1334" data-rawheight="768" class="origin_image zh-lightbox-thumb" width="1334" data-original="https://pic4.zhimg.com/08df4fad3cede85e28c121e820be7aff_r.png">看右侧,我擦嘞,居然是TextView,上面那个有个飞机的也是图片。看右侧,我擦嘞,居然是TextView,上面那个有个飞机的也是图片。
那是不是TextView的图文混排呢?
写段代码试下呗,测试发现没有卵用(具体为什么不可行,大家有兴趣可以分析下Android源码)。
那该怎么办,不知道你发现没有,淘宝使用的几乎都是emoji表情。
既然这样就好办了,在传入Notification的数据里面写入emoji数据试试。
果然,真的可以使用。而且,不限制放多少表情,客官随便放。
<img src="https://pic3.zhimg.com/fa46001dee8f320221bd612dd5552426_b.png" data-rawwidth="1083" data-rawheight="206" class="origin_image zh-lightbox-thumb" width="1083" data-original="https://pic3.zhimg.com/fa46001dee8f320221bd612dd5552426_r.png"><img src="https://pic1.zhimg.com/96c062c8a17162a7e229d9cd99ec7994_b.png" data-rawwidth="1057" data-rawheight="219" class="origin_image zh-lightbox-thumb" width="1057" data-original="https://pic1.zhimg.com/96c062c8a17162a7e229d9cd99ec7994_r.png">第一张图是锤子T1,第二张是一加2(氧系统)。
第一张图是锤子T1,第二张是一加2(氧系统)。
这种实现有3个问题:
一是只能只用Unicode范围内的表情(其实就是字体文字,只是系统渲染出来看着像表情),当然不一定限定于Emoji范围(比如Unicode 0x2708是个灰机✈);
二是不同系统显示的表情不一样;
三是貌似4.0系统以下不支持。
那我要显示其他表情该怎么办。那就只有自定义通知栏布局了。
看到那个搜狗市场的更新图标了么?布局大致如右侧。也就是 @hi大头鬼hi 同学所说的icon。
那如果真的要图文混排怎么办,那就整个通知栏一个ImageView,然后把文字、图片绘制到一个Bitmap上,然后再设置进去。理论可行。
<img src="https://pic1.zhimg.com/bdf6d67e2f7dadcd1ea966888a125fa4_b.png" data-rawwidth="1033" data-rawheight="680" class="origin_image zh-lightbox-thumb" width="1033" data-original="https://pic1.zhimg.com/bdf6d67e2f7dadcd1ea966888a125fa4_r.png">
最后,上淘宝通知栏显示表情的测试代码。
Emoji Unicode编码可参考附录。
String originalStr = "emoji-" + newString(0x1f602) +newString(0x1f684)+"--over";
Notifier.getInstance().notify(originalStr,originalStr,"tickerText2",Notifier.TYPE_COMMON,false); public static final String newString(int codePoint) {
return new String(Character.toChars(codePoint));
}
作者:RxRead
链接:https://www.zhihu.com/question/34870984/answer/60229859
来源:知乎
著作权归作者所有,转载请联系作者获得授权。 /**
* Notification
*/
public class Notifier { private static Notifier instance = null; private NotificationManager notificationManager; private static Object INSTANCE_LOCK = new Object(); public static final int TYPE_COMMON = ; private static final String TAG = "Notifier"; Intent mLauncherIntent = null;
Notification notification = null; int count = ; public static Notifier getInstance() {
if (instance == null)
synchronized (INSTANCE_LOCK) {
if (instance == null) {
instance = new Notifier();
}
}
return instance;
} private Notifier() {
this.notificationManager = (NotificationManager) ZanPhoneRecorderApplication.getInstance().getSystemService(Context.NOTIFICATION_SERVICE);
} /**
* 清除所有通知
* */
public void cleanAll() {
if (notificationManager != null) {
notificationManager.cancelAll();
}
} public void cancelByType(int type) {
if (notificationManager != null) {
notificationManager.cancel(type);
}
} /**
*/
public void notify(CharSequence title, CharSequence message, String tickerText, int type, boolean canClear) {
try {
Context context = ZanPhoneRecorderApplication.getInstance();
Notification notification = new Notification();
notification.icon = R.mipmap.ic_launcher;
notification.defaults = Notification.DEFAULT_LIGHTS;
// notification.defaults |= Notification.DEFAULT_SOUND;
// notification.defaults |= Notification.DEFAULT_VIBRATE;
if (canClear)
notification.flags |= Notification.FLAG_AUTO_CANCEL;
else
notification.flags |= Notification.FLAG_NO_CLEAR; if (android.os.Build.VERSION.SDK_INT >= ) {// Android 4.1之后才有
notification.priority = Notification.PRIORITY_MAX;
}
notification.tickerText = tickerText; notification.when = System.currentTimeMillis();
Intent intent = new Intent();
PendingIntent contentIntent = null;
switch (type) {
case TYPE_COMMON:
intent.setClass(context, HomeActivity.class);
contentIntent = PendingIntent.getActivity(context, TYPE_COMMON, intent, PendingIntent.FLAG_UPDATE_CURRENT);
notification.setLatestEventInfo(context, title, message, contentIntent);
break;
}
if (contentIntent != null) {
notification.contentIntent = contentIntent;
notificationManager.notify(type, notification);
}
} catch (Exception e) {
e.printStackTrace();
}
} }

Android Notification如何显示表情?的更多相关文章

  1. Android Notification 详解(一)——基本操作

    Android Notification 详解(一)--基本操作 版权声明:本文为博主原创文章,未经博主允许不得转载. 微博:厉圣杰 源码:AndroidDemo/Notification 文中如有纰 ...

  2. Android Notification 详解——基本操作

    Android Notification 详解 版权声明:本文为博主原创文章,未经博主允许不得转载. 前几天项目中有用到 Android 通知相关的内容,索性把 Android Notificatio ...

  3. 3、android notification 详细用法

    在 android 系统中,在应用程序可能会遇到几种情况需要通知用户,有的需要用户回应,有的则不需要,例如: * 当保存文件等事件完成,应该会出现一个小的消息,以确认保存成功. * 如果应用程序在后台 ...

  4. android Notification定义与应用

    首先要明白一个概念: Intent 与 PendingIntent 的区别: Intent:是意图,即告诉系统我要干什么,然后做Intent应该做的事,而intent是消息的内容 PendingInt ...

  5. Android NOtification 使用(震动 闪屏 铃声)

    一. Notification 简介 在 android 系统中,在应用程序可能会遇到几种情况需要通知用户,有的需要用户回应,有的则不需要,例如: * 当保存文件等事件完成,应该会出现一个小的消息,以 ...

  6. Android Notification通知详细解释

    Android Notification通知具体解释  Notification: (一).简单介绍:         显示在手机状态栏的通知. Notification所代表的是一种具有全局效果的通 ...

  7. Android 编辑框插入表情图片

    首先,把整理好的表情图片以及布局用到的一些图片导入到项目的res/drawable目录中. 然后,编辑res/layout目录下布局.xml文件,这里我把oschina客户端的布局代码贴上来,供大家参 ...

  8. Android Notification通知简介

    Android Notification通知简介 根据activity的生命周期,在activity不显示时,会执行onStop函数(比如按下home键),所以你在onStop函数(按退出键除外)里面 ...

  9. Android Notification状态栏通知

    没有添加额外的震动及声音效果,这里直接实现了通知的功能,看效果吧: MainActivity.java package com.example.notification; import android ...

随机推荐

  1. 1.3 Quick Start中 Step 7: Use Kafka Connect to import/export data官网剖析(博主推荐)

    不多说,直接上干货! 一切来源于官网 http://kafka.apache.org/documentation/ Step 7: Use Kafka Connect to import/export ...

  2. Linux中iptables学习

    防火墙:是一种位于内部网络与外部网络之间安全的防护系统,依照特定的规则,允许或是限制传输的数据通过.iptables通常被用作类UNIX系统中的防火墙,更准确的说,可以称为iptables/netfi ...

  3. jmeter分布式测试的坑(转)

    本文转自:https://www.cnblogs.com/lsjdddddd/p/5806077.html 有关jmeter分布式测试的环境配置,大概就是那样,但是每次想要进行jmeter分布式测试的 ...

  4. windows服务插件利器-新生命组件XAgent使用心得

    1.简单介绍 XAgent为大石头带领下的新生命团队自己开发的一个.Net下的常用的Windows服务管理组件利器,通过在控制台中简单的输入1,2,3,4,5等数字可以实现一步安装.卸载Windows ...

  5. 早该知道的 7 个JavaScript 技巧[转]

    简洁写法 对象的简写在过去,如果你想创建一个对象,你需要这样: var car = new Object();  car.colour = 'red';  car.wheels = 4;  car.h ...

  6. Emgucv 图像操作笔记

    这里记下一些学习过程中的心得和技巧.我用VS2008,C#的平台进行编写. 1.将图片载入PictureBox的方法: Image<Bgr, byte> img = new Image&l ...

  7. Android 网络图片Url 转 Bitmap

    注意:该方法必须要在子线程中调用,因为涉及网络请求 public Bitmap getBitmap(String url) { Bitmap bm = null; try { URL iconUrl ...

  8. (转)oracle常用的数据字典

    一.oracle数据字典主要由以下几种视图构成: .user视图 以user_为前缀,用来记录用户对象的信息 .all视图 以all_为前缀,用来记录用户对象的信息及被授权访问的对象信息 .dba视图 ...

  9. C# 泛型特化

    C# 泛型不是 C++ 的模板类,并不支持特化和偏特化,但是使用一些技巧可以在一定程度上达到相同的目的. 原文是 po 在 stackoverflow 上的一个回答:A: Generic indexe ...

  10. Altium Designer的pcb上添加文字说明