Android 給應(yīng)用程序的icon添加未讀消息個數(shù)提示(紅圈內(nèi)數(shù)字)
最近在做一個可以查看未讀消息的功能,需要在界面中的Tab頁的標(biāo)簽icon的右上角添加一個未讀消息提示的功能。
先上個效果圖出來,比較直觀明白需求:
思路上似乎有兩種:
1. 直接把底圖和紅圓圈的圖片用相對布局進(jìn)行排列,在代碼中動態(tài)更改紅圓中的TextView的數(shù)字,并且識別一下各種情況下紅圓的顯示或者隱藏。這種方法比較直觀。
2. 采用canvas畫出圓和數(shù)字。
由于項目采用的是Tab頁的形式,其中的RadioButton不適合采用相對布局。故我采用了第二種方式。將繪制的過程寫成了工具方法。在需要的時候調(diào)用。便于以后的技術(shù)遷移。
直接上代碼:
/** * 繪制圖標(biāo)右上角的未讀消息數(shù)量顯示 * * @param context * 上下文 * @param icon * 需要被添加的icon的資源ID * @param news * 未讀的消息數(shù)量 * @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進(jìn)行濾波處理 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); // 啟用抗鋸齒和使用設(shè)備的文本字距 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); }
調(diào)用語句:
if (count > 0) {//顯示右上角未讀消息提示 Drawable mineDrawable = BitmapUtil.displayNewsNumber(this, R.drawable.icon_mine, count); mineButton.setCompoundDrawablesWithIntrinsicBounds(null, null, null, mineDrawable);//這里就是設(shè)置背景,自行發(fā)揮。 } else {//隱藏 Drawable defaultDrawable = getResources().getDrawable( R.drawable.icon_mine); mineButton.setCompoundDrawablesWithIntrinsicBounds(null, null, null, defaultDrawable); }
注:
1.count是未讀消息的數(shù)量。
2.setCompoundDrawablesWithIntrinsicBounds(Drawable left, Drawable top, Drawable right, Drawable bottom)
可以在上、下、左、右設(shè)置圖標(biāo),如果不想在某個地方顯示,則設(shè)置為null。圖標(biāo)的寬高將會設(shè)置為固有寬高,既自動通過getIntrinsicWidth和getIntrinsicHeight獲取。該方法是和在xml中設(shè)置 Android:drawableTop="@drawable/icon_mine
"的效果一樣。
以上就是本文的全部內(nèi)容,希望本文的內(nèi)容對大家的學(xué)習(xí)或者工作能帶來一定的幫助,同時也希望多多支持腳本之家!
相關(guān)文章
Android MediaPlayer 音頻倍速播放 調(diào)整播放速度問題
這篇文章主要介紹了Android MediaPlayer 音頻倍速播放,調(diào)整播放速度,本文給大家介紹的非常詳細(xì),具有一定的參考借鑒價值,需要的朋友可以參考下2019-09-09Android 自定義view和屬性動畫實現(xiàn)充電進(jìn)度條效果
近期項目中需要使用到一種類似手機(jī)電池充電進(jìn)度的動畫效果,以前沒學(xué)屬性動畫的時候,是用圖片+定時器的方式來完成的,下面給大家分享android自定義view和屬性動畫實現(xiàn)充電進(jìn)度條2016-12-12Android數(shù)據(jù)結(jié)構(gòu)優(yōu)化教程
這篇文章主要介紹了Android數(shù)據(jù)結(jié)構(gòu)優(yōu)化方案,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)吧2023-01-01Jetpack Compose 雙指拖拽實現(xiàn)詳解
這篇文章主要為大家介紹了Jetpack Compose 雙指拖拽實現(xiàn)詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-11-11Android自定義ViewGroup之第一次接觸ViewGroup
這篇文章主要為大家詳細(xì)介紹了Android自定義ViewGroup之第一次接觸ViewGroup,感興趣的小伙伴們可以參考一下2016-06-06深入淺析Android手機(jī)衛(wèi)士保存密碼時進(jìn)行md5加密
一般的手機(jī)沒有root權(quán)限,進(jìn)不去data/data目錄,當(dāng)手機(jī)刷機(jī)了后,擁有root權(quán)限,就可以進(jìn)入data/data目錄,查看我們保存的密碼文件,因此我們需要對存入的密碼進(jìn)行MD5加密,接下來通過本文給大家介紹Android手機(jī)衛(wèi)士保存密碼時進(jìn)行md5加密,需要的朋友一起學(xué)習(xí)吧2016-04-04Android網(wǎng)絡(luò)編程之簡易新聞客戶端
這篇文章主要為大家詳細(xì)介紹了Android網(wǎng)絡(luò)編程之簡易新聞客戶端的相關(guān)資料,具有一定的參考價值,感興趣的小伙伴們可以參考一下2017-05-05Android Jetpack組件之ViewModel使用詳解
Android中的ViewModel是一個可以用來存儲UI相關(guān)的數(shù)據(jù)的類。ViewModel的生命周期會比創(chuàng)建它的Activity、Fragment的生命周期長,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)吧2023-04-04使用SignalR推送服務(wù)在Android的實現(xiàn) SignalA
SignalA是老外寫的用于實現(xiàn).net端推送消息至安卓端的實現(xiàn),支持版本為android 2.3或以上2014-07-07