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

news/2024/10/22 4:22:18/
在小米 三星  索尼 手机 :图标上显示数字(未读消息数):这部分代码,是从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;//240dpifloat 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){//超过99num = "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) (15*factor);//中心坐标int circleRadius = (int) (13*factor);//圆的半径//绘制左边的圆形Paint leftCirPaint = new Paint(Paint.ANTI_ALIAS_FLAG);leftCirPaint.setColor(Color.RED);canvas.drawCircle(iconSize-circleRadius-textWidth+(10*factor), circleCenter, circleRadius, leftCirPaint);//绘制右边的圆形Paint rightCirPaint = new Paint(Paint.ANTI_ALIAS_FLAG);rightCirPaint.setColor(Color.RED);canvas.drawCircle(iconSize-circleRadius, circleCenter, circleRadius, rightCirPaint);//绘制中间的距形Paint rectPaint = new Paint(Paint.ANTI_ALIAS_FLAG);rectPaint.setColor(Color.RED);RectF oval = new RectF(iconSize-circleRadius-textWidth+(10*factor), 2*factor, iconSize-circleRadius, circleRadius*2+2*factor);canvas.drawRect(oval, rectPaint);//绘制数字canvas.drawText(num, (float)(iconSize-textWidth/2-(24*factor)), 23*factor,        numPaint);}else{//<=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);//绘制外面的圆形//Paint outCirPaint = new Paint(Paint.ANTI_ALIAS_FLAG);//outCirPaint.setColor(Color.WHITE);//canvas.drawCircle(iconSize - 15, 15, 15, outCirPaint);//绘制内部的圆形Paint inCirPaint = new Paint(Paint.ANTI_ALIAS_FLAG);inCirPaint.setColor(Color.RED);canvas.drawCircle(iconSize-15*factor, 15*factor, 15*factor, inCirPaint);//绘制数字canvas.drawText(num, (float)(iconSize-textWidth/2-15*factor), 22*factor, numPaint);}}return numIcon;}/**** * 生成有数字的图片(没有边框)* @param context* @param icon 图片* @param isShowNum 是否要绘制数字* @param num 数字字符串:整型数字 超过99,显示为"99+"* @return*/public static Bitmap generatorNumIcon2(Context context, Bitmap icon, boolean isShowNum, String num) {DisplayMetrics dm = context.getResources().getDisplayMetrics();//基准屏幕密度float baseDensity = 1.5f;//240dpifloat 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){//超过99num = "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);/**----------------------------------** TODO 绘制圆角矩形背景 start*------------------------------------*///圆角矩形背景的宽度int backgroundHeight = (int) (2*15*factor);int backgroundWidth = textWidth>backgroundHeight ? (int)(textWidth+10*factor) : backgroundHeight;canvas.save();//保存状态ShapeDrawable drawable = getDefaultBackground(context);drawable.setIntrinsicHeight(backgroundHeight);drawable.setIntrinsicWidth(backgroundWidth);drawable.setBounds(0, 0, backgroundWidth, backgroundHeight);canvas.translate(iconSize-backgroundWidth, 0);drawable.draw(canvas);canvas.restore();//重置为之前保存的状态/**----------------------------------** TODO 绘制圆角矩形背景 end*------------------------------------*///绘制数字canvas.drawText(num, (float)(iconSize-(backgroundWidth + textWidth)/2), 22*factor, numPaint);}return numIcon;}/**** * 生成有数字的图片(有边框)* @param context* @param icon 图片* @param isShowNum 是否要绘制数字* @param num 数字字符串:整型数字 超过99,显示为"99+"* @return*/public static Bitmap generatorNumIcon3(Context context, Bitmap icon, boolean isShowNum, String num) {DisplayMetrics dm = context.getResources().getDisplayMetrics();//基准屏幕密度float baseDensity = 1.5f;//240dpifloat 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){//超过99num = "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);/**----------------------------------** TODO 绘制圆角矩形背景:先画边框,再画内部的圆角矩形 start*------------------------------------*///圆角矩形背景的宽度int backgroundHeight = (int) (2*15*factor);int backgroundWidth = textWidth>backgroundHeight ? (int)(textWidth+10*factor) : backgroundHeight;//边框的宽度int strokeThickness = (int) (2*factor);canvas.save();//保存状态int strokeHeight = backgroundHeight + strokeThickness*2;int strokeWidth = textWidth>strokeHeight ? (int)(textWidth+ 10*factor + 2*strokeThickness) : strokeHeight;ShapeDrawable outStroke = getDefaultStrokeDrawable(context);outStroke.setIntrinsicHeight(strokeHeight);outStroke.setIntrinsicWidth(strokeWidth);outStroke.setBounds(0, 0, strokeWidth, strokeHeight);canvas.translate(iconSize-strokeWidth-strokeThickness, strokeThickness);outStroke.draw(canvas);canvas.restore();//重置为之前保存的状态canvas.save();//保存状态ShapeDrawable drawable = getDefaultBackground(context);drawable.setIntrinsicHeight((int) (backgroundHeight+2*factor));drawable.setIntrinsicWidth((int) (backgroundWidth+2*factor));drawable.setBounds(0, 0, backgroundWidth, backgroundHeight);canvas.translate(iconSize-backgroundWidth-2*strokeThickness, 2*strokeThickness);drawable.draw(canvas);canvas.restore();//重置为之前保存的状态/**----------------------------------** TODO 绘制圆角矩形背景 end*------------------------------------*///绘制数字canvas.drawText(num, (float)(iconSize-(backgroundWidth + textWidth+4*strokeThickness)/2), (22)*factor+2*strokeThickness, numPaint);}return numIcon;}/**** * 生成有数字的图片(有边框的)* @param context* @param icon 图片* @param isShowNum 是否要绘制数字* @param num 数字字符串:整型数字 超过99,显示为"99+"* @return*/public static Bitmap generatorNumIcon4(Context context, Bitmap icon, boolean isShowNum, String num) {DisplayMetrics dm = context.getResources().getDisplayMetrics();//基准屏幕密度float baseDensity = 1.5f;//240dpifloat 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){//超过99num = "99+";}//启用抗锯齿和使用设备的文本字体//测量文本占用的宽度Paint numPaint = new Paint(Paint.ANTI_ALIAS_FLAG | Paint.DEV_KERN_TEXT_FLAG);numPaint.setColor(Color.WHITE);numPaint.setTextSize(25f*factor);numPaint.setTypeface(Typeface.DEFAULT_BOLD);int textWidth=(int)numPaint.measureText(num, 0, num.length());Log.e(TAG, "text width:"+textWidth);/**----------------------------------** TODO 绘制圆角矩形背景 start*------------------------------------*///边框的宽度int strokeThickness = (int) (DEFAULT_STROKE_WIDTH_DIP*factor);//圆角矩形背景的宽度float radiusPx = 15*factor;int backgroundHeight = (int) (2*(radiusPx+strokeThickness));//2*(半径+边框宽度)int backgroundWidth = textWidth>backgroundHeight ? (int)(textWidth + 10*factor + 2*strokeThickness) : backgroundHeight;canvas.save();//保存状态ShapeDrawable drawable = getDefaultBackground2(context);drawable.setIntrinsicHeight(backgroundHeight);drawable.setIntrinsicWidth(backgroundWidth);drawable.setBounds(0, 0, backgroundWidth, backgroundHeight);canvas.translate(iconSize-backgroundWidth-strokeThickness, 2*strokeThickness);drawable.draw(canvas);canvas.restore();//重置为之前保存的状态/**----------------------------------** TODO 绘制圆角矩形背景 end*------------------------------------*///绘制数字canvas.drawText(num, (float)(iconSize-(backgroundWidth + textWidth+2*strokeThickness)/2), (float) (25*factor+2.5*strokeThickness), numPaint);}return numIcon;}/**** 创建原生系统的快捷方式* @param context * @param clazz 启动的activity* @param isShowNum 是否显示数字* @param num 显示的数字:整型* @param isStroke 是否加上边框*/public static void installRawShortCut(Context context, Class<?> clazz, boolean isShowNum, String num, boolean isStroke) {Log.e(TAG, "installShortCut....");Intent shortcutIntent = new Intent(        "com.android.launcher.action.INSTALL_SHORTCUT");//名称shortcutIntent.putExtra(Intent.EXTRA_SHORTCUT_NAME,        context.getString(R.string.app_name));// 是否可以有多个快捷方式的副本,参数如果是true就可以生成多个快捷方式,如果是false就不会重复添加shortcutIntent.putExtra("duplicate", false);//点击快捷方式:打开activityIntent mainIntent = new Intent(Intent.ACTION_MAIN);mainIntent.addCategory(Intent.CATEGORY_LAUNCHER);mainIntent.setClass(context, clazz);shortcutIntent.putExtra(Intent.EXTRA_SHORTCUT_INTENT, mainIntent);//快捷方式的图标if(isStroke){shortcutIntent.putExtra(Intent.EXTRA_SHORTCUT_ICON,generatorNumIcon4(context, ((BitmapDrawable)context.getResources().getDrawable(R.drawable.ic_launcher)).getBitmap(),isShowNum, num));}else{shortcutIntent.putExtra(Intent.EXTRA_SHORTCUT_ICON,generatorNumIcon2(context, ((BitmapDrawable)context.getResources().getDrawable(R.drawable.ic_launcher)).getBitmap(),isShowNum, num));}context.sendBroadcast(shortcutIntent);}/**** 是否已经创建了快捷方式* @param context* @return*/public static boolean isAddShortCut(Context context) {Log.e(TAG, "isAddShortCut....");boolean isInstallShortcut = false;final ContentResolver cr = context.getContentResolver();//TODO 注释的代码,在有的手机:修改了ROM的系统,不能支持/*int versionLevel = android.os.Build.VERSION.SDK_INT;String AUTHORITY = "com.android.launcher2.settings";//2.2以上的系统的文件文件名字是不一样的if (versionLevel >= 8) {AUTHORITY = "com.android.launcher2.settings";} else {AUTHORITY = "com.android.launcher.settings";}*/String AUTHORITY = getAuthorityFromPermission(context, "com.android.launcher.permission.READ_SETTINGS");Log.e(TAG, "AUTHORITY  :  " +AUTHORITY);final Uri CONTENT_URI = Uri.parse("content://" + AUTHORITY+ "/favorites?notify=true");Cursor c = cr.query(CONTENT_URI,new String[] { "title" }, "title=?",new String[] { context.getString(R.string.app_name) }, null);if (c != null && c.getCount() > 0) {isInstallShortcut = true;}if(c != null){c.close();}Log.e(TAG, "isAddShortCut....isInstallShortcut="+isInstallShortcut);return isInstallShortcut;}/*** 删除快捷方式 * @param context* @param clazz*/public static void deleteShortCut(Context context, Class<?> clazz){Log.e(TAG, "delShortcut....");if (Build.MANUFACTURER.equalsIgnoreCase("Xiaomi")){//小米//当为""时,不显示数字,相当于隐藏了)xiaoMiShortCut(context, clazz, "");}else if(Build.MANUFACTURER.equalsIgnoreCase("samsung")){//三星samsungShortCut(context, "0");}else {//其他原生系统手机//删除显示数字的快捷方式deleteRawShortCut(context, clazz);//安装不显示数字的快捷方式//installRawShortCut(context, clazz, false, "0");}}/**** 删除原生系统的快捷方式* @param context* @param clazz 启动的activity*/public static void deleteRawShortCut(Context context, Class<?> clazz) {Intent intent = new Intent("com.android.launcher.action.UNINSTALL_SHORTCUT");//快捷方式的名称intent.putExtra(Intent.EXTRA_SHORTCUT_NAME, context.getString(R.string.app_name));Intent intent2 = new Intent(); intent2.setClass(context, clazz); intent2.setAction(Intent.ACTION_MAIN); intent2.addCategory(Intent.CATEGORY_LAUNCHER); intent.putExtra(Intent.EXTRA_SHORTCUT_INTENT,intent2); context.sendBroadcast(intent);}/**** 取得权限相应的认证URI* @param context* @param permission* @return*/public static String getAuthorityFromPermission(Context context, String permission) {if (TextUtils.isEmpty(permission)) {return null;}List<PackageInfo> packInfos = context.getPackageManager().getInstalledPackages(PackageManager.GET_PROVIDERS);if (packInfos == null) {return null;}for (PackageInfo info : packInfos) {ProviderInfo[] providers = info.providers;if (providers != null) {for (ProviderInfo provider : providers) {if (permission.equals(provider.readPermission)|| permission.equals(provider.writePermission)) {return provider.authority;}}}}return null;}/**** 在小米应用图标的快捷方式上加数字<br>* * * @param context* @param num 显示的数字:大于99,为"99",当为""时,不显示数字,相当于隐藏了)<br><br>* * 注意点:* context.getPackageName()+"/."+clazz.getSimpleName() (这个是启动activity的路径)中的"/."不能缺少* */public static void xiaoMiShortCut(Context context,Class<?> clazz, String num){Log.e(TAG, "xiaoMiShortCut....");Intent localIntent = new Intent("android.intent.action.APPLICATION_MESSAGE_UPDATE");localIntent.putExtra("android.intent.extra.update_application_component_name", context.getPackageName()+"/."+clazz.getSimpleName());if(TextUtils.isEmpty(num)){num = "";}else{int numInt = Integer.valueOf(num);if (numInt > 0){if (numInt > 99){num = "99";}}else{num = "0";}}localIntent.putExtra("android.intent.extra.update_application_message_text", num);context.sendBroadcast(localIntent);}                                                                                        /**** 索尼手机:应用图标的快捷方式上加数字* @param context* @param num*/public static void sonyShortCut(Context context, String num){String activityName = getLaunchActivityName(context);if (activityName == null){return;}Intent localIntent = new Intent();int numInt = Integer.valueOf(num);boolean isShow = true;if (numInt < 1){num = "";isShow = false;}else if (numInt > 99){num = "99";}localIntent.putExtra("com.sonyericsson.home.intent.extra.badge.SHOW_MESSAGE", isShow);localIntent.setAction("com.sonyericsson.home.action.UPDATE_BADGE");localIntent.putExtra("com.sonyericsson.home.intent.extra.badge.ACTIVITY_NAME", activityName);localIntent.putExtra("com.sonyericsson.home.intent.extra.badge.MESSAGE", num);localIntent.putExtra("com.sonyericsson.home.intent.extra.badge.PACKAGE_NAME", context.getPackageName());context.sendBroadcast(localIntent);}/**** 三星手机:应用图标的快捷方式上加数字* @param context* @param num*/public static void samsungShortCut(Context context, String num){int numInt = Integer.valueOf(num);if (numInt < 1){num = "0";}else if (numInt > 99){num = "99";}String activityName = getLaunchActivityName(context);Intent localIntent = new Intent("android.intent.action.BADGE_COUNT_UPDATE");localIntent.putExtra("badge_count", num);localIntent.putExtra("badge_count_package_name", context.getPackageName());localIntent.putExtra("badge_count_class_name", activityName);context.sendBroadcast(localIntent);}/**** 在应用图标的快捷方式上加数字* @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);}}/**** 取得当前应用的启动activity的名称:* mainfest.xml中配置的 android:name:"* @param context* @return*/public static String getLaunchActivityName(Context context){PackageManager localPackageManager = context.getPackageManager();Intent localIntent = new Intent("android.intent.action.MAIN");localIntent.addCategory("android.intent.category.LAUNCHER");try{Iterator<ResolveInfo> localIterator = localPackageManager.queryIntentActivities(localIntent, 0).iterator();while (localIterator.hasNext()){ResolveInfo localResolveInfo = localIterator.next();if (!localResolveInfo.activityInfo.applicationInfo.packageName.equalsIgnoreCase(context.getPackageName()))continue;String str = localResolveInfo.activityInfo.name;return str;}}catch (Exception localException){return null;}return null;}/**** 得到一个默认的背景:圆角矩形<br><br>* 使用代码来生成一个背景:相当于用<shape>的xml的背景* * @return*/private static ShapeDrawable getDefaultBackground(Context context) {//这个是为了应对不同分辨率的手机,屏幕兼容性int r = dipToPixels(context,DEFAULT_CORNER_RADIUS_DIP);float[] outerR = new float[] {r, r, r, r, r, r, r, r};//圆角矩形RoundRectShape rr = new RoundRectShape(outerR, null, null);ShapeDrawable drawable = new ShapeDrawable(rr);drawable.getPaint().setColor(DEFAULT_NUM_COLOR);//设置颜色return drawable;}/**** 得到一个默认的背景:圆角矩形<br><br>* 使用代码来生成一个背景:相当于用<shape>的xml的背景* * @return*/private static ShapeDrawable getDefaultBackground2(Context context) {//这个是为了应对不同分辨率的手机,屏幕兼容性int r = dipToPixels(context,DEFAULT_CORNER_RADIUS_DIP);float[] outerR = new float[] {r, r, r, r, r, r, r, r};int distance = dipToPixels(context,DEFAULT_STROKE_WIDTH_DIP);//圆角矩形RoundRectShape rr = new RoundRectShape(outerR, null, null);customBorderDrawable drawable = new customBorderDrawable(context,rr);drawable.getFillpaint().setColor(DEFAULT_NUM_COLOR);//设置填充颜色drawable.getStrokepaint().setColor(DEFAULT_STROKE_COLOR);//设置边框颜色drawable.getStrokepaint().setStrokeWidth(distance);//设置边框宽度return drawable;}/**** 得到一个默认的背景:圆角矩形<br><br>* 使用代码来生成一个背景:相当于用<shape>的xml的背景* * @return*/private static ShapeDrawable getDefaultStrokeDrawable(Context context) {//这个是为了应对不同分辨率的手机,屏幕兼容性int r = dipToPixels(context, DEFAULT_CORNER_RADIUS_DIP);int distance = dipToPixels(context, DEFAULT_STROKE_WIDTH_DIP);float[] outerR = new float[] {r, r, r, r, r, r, r, r};//圆角矩形RoundRectShape rr = new RoundRectShape(outerR, null, null);ShapeDrawable drawable = new ShapeDrawable(rr);drawable.getPaint().setStrokeWidth(distance);drawable.getPaint().setStyle(Paint.Style.FILL);drawable.getPaint().setColor(DEFAULT_STROKE_COLOR);//设置颜色return drawable;}/**** dp to px* @param dip* @return*/public static int dipToPixels(Context context, int dip) {Resources r = context.getResources();float px = TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, dip, r.getDisplayMetrics());return (int) px;}
}



http://www.ppmy.cn/news/561314.html

相关文章

PHP信电系网站建设设计(源代码+论文)

第一章 概述 1.1课题背景 互联网作为信息双向交流和通讯的工具,已经成为商家青睐的传播媒介,被称之为继广播、报纸、杂志、电视后的第五种媒体--数字媒体。 学校网站是学校的"商标",每一所学校都有自己的特色,每一所学校都有自己的个性。在这个高度信息化的…

不提杨元庆,先看看联想该如何让Moto复活

最近两天&#xff0c;联想和自媒体打嘴仗的新闻引人瞩目&#xff0c;一家自媒体写了一篇对联想和杨元庆质疑的文章&#xff0c;其中论据有不少问题&#xff0c;引发联想的反击&#xff0c;联想认为自媒体不严谨&#xff0c;结论不正确&#xff0c;两者争执不休。 其实从财报上看…

手机游戏趋势

&#xff08;源自&#xff1a;http://wap.soyoyo.cn/html/2004/8/16/n2004-8-16sr104028.html&#xff09;概要 手机游戏成绩斐然&#xff0c;成为IT产业中增长最快的部分之一。在本文中&#xff0c;作者 Michael Yuan 为Java开发者着力分析了这个令人激动的新市场的特征和…

2022百万奖金投委团 |香港科大-杰瑞集团 2022【人工智能】百万奖金国际创业大赛...

“世有伯乐&#xff0c;然后有千里马”&#xff0c;在科创时代中亦是如此。"香港科大-杰瑞集团" 2022【人工智能】百万奖金国际创业大赛得到了香港科大校友们的踊跃支持及创业团队的积极响应&#xff01;作为港科百创的独创赛制&#xff0c;“百万奖金投委团”不仅捐…

联想与华为,通往神秘花园的交叉小径

1980年代中期&#xff0c;两个1944年出生的男人几乎同时创业&#xff0c;在那通往未知命运的泥泞小路上跋涉探索。 那时候的他们&#xff0c;并不知道&#xff0c;联想与华为的命运会在接下来的30年中出现数度的交叉。 最开始的联想&#xff0c;起点是相当不错的。 联想的前身是…

罗永浩手机成败否

导语 正当手机行业里风云变幻&#xff0c;群雄并起之时&#xff0c;靠做英语培训和上网吐槽闯出名声的罗永浩突然杀出&#xff0c; 这头刚注册了个公司&#xff0c;那头继而便宣称乔布斯已死&#xff0c;罗永浩当立。一条条试用微博&#xff0c;大批特批当前市场上流行的品牌手…

联想季报中反映的增长经验

联想集团日前在香港公布本财年第一季度业绩报。因为此前对联想2.31亿欧元收购德国梅迪昂事件的关注&#xff0c;我特别留意了联想这次的季报。 PC是联想集团的主要业务&#xff0c;而另一个发展重点则是作为PC产品衍生领域的平板电脑。假如对PC行业的荆棘丛生缺乏感性认识&…

联想第二季度业绩创纪录 所有业务实现强劲增长

集团总营业额年比年提升超过7%至145 亿美元第二季度税前利润年比年提升52%达4.70亿美元净利润年比年提升53%达3.10亿美元集团看好未来增长机遇&#xff0c;远超分析师预期 香港 -- (美国商业资讯) -- 联想集团&#xff08;HKSE&#xff1a;992&#xff09;&#xff08;ADR&…