在小米 三星 索尼 手机 :图标上显示数字

本文介绍了如何在小米、三星和索尼等Android手机上实现应用图标上显示未读消息数字的方法,包括所需的代码和配置步骤。
摘要由CSDN通过智能技术生成
在小米 三星  索尼 手机 :图标上显示数字(未读消息数):这部分代码,是从QQ5.0.apk中找的。
小米已经测试通过了,
三星和索尼的,由于没有相应的手机,没有测试,有的,可能修改一下代码(判断是什么手机的代码),
测试一下,可以在回复一下测试结果,谢谢


1.原生系统(原生的 Launcher  ),只能修改快捷方式,增加和删除都会有toast提示

2.小米 三星  索尼 手机: 自定义的launcher:  发送显示未读消息数的action已经不同了。具体可以去看代码。。。


判断手机的代码:

/***
          * 在应用图标的快捷方式上加数字
          * @param clazz 启动的activity
          * @param isShowNum 是否显示数字
          * @param num 显示的数字:整型
          * @param isStroke 是否加上边框
          * 
          */
        public static void addNumShortCut(Context context,Class<?> clazz,boolean isShowNum, String num, boolean isStroke)
          {
                 Log.e(TAG, "manufacturer="+Build.MANUFACTURER);
            if (Build.MANUFACTURER.equalsIgnoreCase("Xiaomi")){
                    //小米
              xiaoMiShortCut(context, clazz, num);
              
            }else if(Build.MANUFACTURER.equalsIgnoreCase("samsung")){
                    //三星
                    samsungShortCut(context, num);
                    
            }else {//其他原生系统手机
                    installRawShortCut(context, MainActivity.class, isShowNum, num, isStroke);
            }
            
          }

下面写好的工具类,上面的方法也在其中。


/***
 * 应用的快捷方式工具类
 * 
 * @author yang
 * 
 */
public class AppShortCutUtil {

        private static final String TAG = "AppShortCutUtil";
        
        //默认圆角半径
        private static final int DEFAULT_CORNER_RADIUS_DIP = 8;
        //默认边框宽度
        private static final int DEFAULT_STROKE_WIDTH_DIP = 2;
        //边框的颜色
        private static final int DEFAULT_STROKE_COLOR = Color.WHITE;
        //中间数字的颜色
        private static final int DEFAULT_NUM_COLOR = Color.parseColor("#CCFF0000");


        /***
         * 
         * 生成有数字的图片(没有边框)
         * @param context
         * @param icon 图片
         * @param isShowNum 是否要绘制数字
         * @param num 数字字符串:整型数字 超过99,显示为"99+"
         * @return
         */
        public static Bitmap generatorNumIcon(Context context, Bitmap icon, boolean isShowNum, String num) {
                
                DisplayMetrics dm = context.getResources().getDisplayMetrics();
                //基准屏幕密度
                float baseDensity = 1.5f;//240dpi
                float factor = dm.density/baseDensity;
                
                Log.e(TAG, "density:"+dm.density);
                Log.e(TAG, "dpi:"+dm.densityDpi);
                Log.e(TAG, "factor:"+factor);
                
                // 初始化画布
                int iconSize = (int) context.getResources().getDimension(android.R.dimen.app_icon_size);
                Bitmap numIcon = Bitmap.createBitmap(iconSize, iconSize, Config.ARGB_8888);
                Canvas canvas = new Canvas(numIcon);

                // 拷贝图片
                Paint iconPaint = new Paint();
                iconPaint.setDither(true);// 防抖动
                iconPaint.setFilterBitmap(true);// 用来对Bitmap进行滤波处理,这样,当你选择Drawable时,会有抗锯齿的效果
                Rect src = new Rect(0, 0, icon.getWidth(), icon.getHeight());
                Rect dst = new Rect(0, 0, iconSize, iconSize);
                canvas.drawBitmap(icon, src, dst, iconPaint);
                
                if(isShowNum){
                         
                        if(TextUtils.isEmpty(num)){
                                num = "0";
                        }
                        
                        if(!TextUtils.isDigitsOnly(num)){
                                //非数字
                                Log.e(TAG, "the num is not digit :"+ num);
                                num = "0";
                        }
                        
                        int numInt = Integer.valueOf(num);
                        
                        if(numInt > 99){//超过99
                                
                                num = "99+";
                                
                                // 启用抗锯齿和使用设备的文本字体大小
                                Paint numPaint = new Paint(Paint.ANTI_ALIAS_FLAG | Paint.DEV_KERN_TEXT_FLAG);
                                numPaint.setColor(Color.WHITE);
                                numPaint.setTextSize(20f*factor);
                                numPaint.setTypeface(Typeface.DEFAULT_BOLD);
                                int textWidth=(int)numPaint.measureText(num, 0, num.length());
                                
                                Log.e(TAG, "text width:"+textWidth);
                                
                                int circleCenter = (int)
  • 1
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 7
    评论
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值