Android 给应用程序的icon添加未读消息个数提示(红圈内数字)

所属分类: 软件编程 / Android 阅读数: 50
收藏 0 赞 0 分享

最近在做一个可以查看未读消息的功能,需要在界面中的Tab页的标签icon的右上角添加一个未读消息提示的功能。

先上个效果图出来,比较直观明白需求:

思路上似乎有两种:

 1. 直接把底图和红圆圈的图片用相对布局进行排列,在代码中动态更改红圆中的TextView的数字,并且识别一下各种情况下红圆的显示或者隐藏。这种方法比较直观。

 2. 采用canvas画出圆和数字。

由于项目采用的是Tab页的形式,其中的RadioButton不适合采用相对布局。故我采用了第二种方式。将绘制的过程写成了工具方法。在需要的时候调用。便于以后的技术迁移。

直接上代码:

/** 
  * 绘制图标右上角的未读消息数量显示 
  * 
  * @param context 
  *   上下文 
  * @param icon 
  *   需要被添加的icon的资源ID 
  * @param news 
  *   未读的消息数量 
  * @return drawable 
  */ 
 @SuppressWarnings("unused") 
 public static Drawable displayNewsNumber(Context context, int icon, int news) { 
  // 初始化画布 
  int iconSize = (int) context.getResources().getDimension( 
    android.R.dimen.app_icon_size); 
  // Bitmap contactIcon = Bitmap.createBitmap(iconSize, iconSize, 
  // Config.ARGB_8888); 
  Bitmap iconBitmap = BitmapFactory.decodeResource( 
    context.getResources(), icon); 
  Canvas canvas = new Canvas(iconBitmap); 
  // 拷贝图片 
  Paint iconPaint = new Paint(); 
  iconPaint.setDither(true);// 防抖动 
  iconPaint.setFilterBitmap(true);// 用来对Bitmap进行滤波处理 
  Rect src = new Rect(0, 0, iconBitmap.getWidth(), iconBitmap.getHeight()); 
  Rect dst = new Rect(0, 0, iconBitmap.getWidth(), iconBitmap.getHeight()); 
  canvas.drawBitmap(iconBitmap, src, dst, iconPaint); 
  // 启用抗锯齿和使用设备的文本字距 
  Paint countPaint = new Paint(Paint.ANTI_ALIAS_FLAG 
    | Paint.DEV_KERN_TEXT_FLAG); 
  countPaint.setColor(Color.RED); 
  canvas.drawCircle(iconSize - 13, 20, 10, countPaint); 

  Paint textPaint = new Paint(); 
  textPaint.setColor(Color.WHITE); 
  // textPaint.setTypeface(Typeface.DEFAULT_BOLD); 
  textPaint.setTextSize(19f); 
  canvas.drawText(String.valueOf(news), iconSize - 18, 27, textPaint); 
  return new BitmapDrawable(iconBitmap); 
 } 

调用语句:

if (count > 0) {//显示右上角未读消息提示 
   Drawable mineDrawable = BitmapUtil.displayNewsNumber(this, 
     R.drawable.icon_mine, count); 
   mineButton.setCompoundDrawablesWithIntrinsicBounds(null, null, 
     null, mineDrawable);//这里就是设置背景,自行发挥。 
  } else {//隐藏 
   Drawable defaultDrawable = getResources().getDrawable( 
     R.drawable.icon_mine); 
   mineButton.setCompoundDrawablesWithIntrinsicBounds(null, null, 
     null, defaultDrawable); 
  } 

注:

1.count是未读消息的数量。

2.setCompoundDrawablesWithIntrinsicBounds(Drawable left, Drawable top, Drawable right, Drawable bottom)可以在上、下、左、右设置图标,如果不想在某个地方显示,则设置为null。图标的宽高将会设置为固有宽高,既自动通过getIntrinsicWidth和getIntrinsicHeight获取。该方法是和在xml中设置 Android:drawableTop="@drawable/icon_mine"的效果一样。

以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,同时也希望多多支持脚本之家!

更多精彩内容其他人还在看

Android样式和主题之选择器的实例讲解

今天小编就为大家分享一篇关于Android样式和主题之选择器的实例讲解,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看吧
收藏 0 赞 0 分享

Android应用动态修改主题的方法示例

今天小编就为大家分享一篇关于Android应用动态修改主题的方法示例,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看吧
收藏 0 赞 0 分享

Flutter 网络请求框架封装详解

这篇文章主要介绍了Flutter 网络请求框架封装详解,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
收藏 0 赞 0 分享

Flutter倒计时/计时器的实现代码

这篇文章主要介绍了Flutter倒计时/计时器的实现代码,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
收藏 0 赞 0 分享

Android使用google breakpad捕获分析native cash

这篇文章主要介绍了Android使用google breakpad捕获分析native cash 的相关知识,非常不错,具有一定的参考借鉴价值,需要的朋友可以参考下
收藏 0 赞 0 分享

详解Flutter WebView与JS互相调用简易指南

这篇文章主要介绍了详解Flutter WebView与JS互相调用简易指南,分为JS调用Flutter和Flutter调用JS,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
收藏 0 赞 0 分享

Android开发实现ListView和adapter配合显示图片和文字列表功能示例

这篇文章主要介绍了Android开发实现ListView和adapter配合显示图片和文字列表功能,涉及Android使用ListView结合adapter适配器实现图文显示功能相关的布局、解析、权限控制等操作技巧,需要的朋友可以参考下
收藏 0 赞 0 分享

Android文字基线Baseline算法的使用讲解

今天小编就为大家分享一篇关于Android文字基线Baseline算法的使用讲解,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看吧
收藏 0 赞 0 分享

Flutter自定义实现神奇动效的卡片切换视图的示例代码

这篇文章主要介绍了Flutter自定义实现神奇动效的卡片切换视图的示例代码,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
收藏 0 赞 0 分享

Android实现自定义滑动刻度尺方法示例

这篇文章主要给大家介绍了关于Android实现自定义滑动刻度尺的相关资料,文中通过示例代码介绍的非常详细,对各位Android开发者们具有一定的参考学习价值,需要的朋友们下面来一起学习学习吧
收藏 0 赞 0 分享
查看更多