Android 在通知欄使用自定義字型

2021-07-24 15:53:56 字數 2151 閱讀 2874

背景:

在通知欄使用自定義布局時,經常會有各種奇葩的需求,更改字型,更改字型顏色,更改等等。。。

實踐:讓我們一條一條來分析:

1,動態設定文字:remoteviews.settextviewtext(r.id.fn_flow_noti_hotword_content_black, keyword);  get;

2.動態設定文字顏色:emoteviews.settextcolor(r.id.fn_flow_noti_text_int_flow_black, color.parsecolor("#cd3e3e"));  get

3.動態設定文字大小:remoteviews.settextviewtextsize(r.id.fn_flow_noti_info_layout_time_black,13); 

but   檢視api這個方法只支援android 16 以上,但是我們的應用要支援到14啊!!!!!,

解決方案:

spannablestring mspint= null;

mspint = new spannablestring(leftstring[1]);

mspint.setspan(new absolutesizespan(sp2px(context,25)), 0, leftstring[1].length(), spanned.span_exclusive_exclusive);

remoteviews.settextviewtext(r.id.fn_flow_noti_text_int_flow_black,mspint);

我們看下remoteviews.settext()第二個引數,發現是charsequence;

只要支援charsequence那麼就可以使用spannablestring。get

4.通知欄使用自定義字型

通知欄使用大號字型會出現字型太粗,字型間隔太大的問題,我們嘗試使用spannablestring來解決這個問題,但是發現,及時你給spannablestring 設定了自定義字型,執行發現並沒有生效,簡單看下原始碼會發現通知欄遮蔽了textview的字型效果。

textview行不通,那麼就只能考慮imgaeview,imageview也有兩種方案:

1) 在uc瀏覽器的常駐通知欄上有乙個溫度的數字顯示,也是大號字型,但是確實沒有特別粗,間距也不大,粗布分析時使用了,解壓縮一下apk,在res下可以找到0-9的10張,這是一種實現方式

2)使用畫布的方式來手動繪製,廢話不多上,上**:

/**

* 使用自定義字型繪製流量資訊以及低流量

* @param context

* @param str

* @param flowstatus

* @return

*/private static bitmap buildupdate(context context,spannablestring str,int flowstatus) else

//生成畫布 寬度為文字寬度,加30保證不被壓縮到,高度為通知欄高度

bitmap mbitmap = bitmap.createbitmap(mcanvaswidth+30,dip2px(context,65), bitmap.config.argb_4444);

canvas mcanvas = new canvas(mbitmap);

//計算文字的左下起點y值,畫布中線家加上文字高度的一半

float baseline = dip2px(context,65)/2 + paint.gettextsize()/2;

//繪製整數字

paint.settextsize(sp2px(context,40));

mcanvas.drawtext(str,0,3, 10, baseline, paint);

//繪製小數字

paint.settextsize(sp2px(context,20));

mcanvas.drawtext(str,3,str.length(), boundsleft.width()+15,baseline, paint);

//流量不足時顯示低流量

if(flowstatus == flowdatautils.state_warning)

return mbitmap;

}

通知欄,使用自定義布局

通知欄新增自定義布局 一定要注意 新增channel,還有構建的時候把id加進去。string channelid null if android.os.build.version.sdk int android.os.build.version codes.o channelid非常重要,不設定通...

Android展開 摺疊通知欄

最近幾天碰到乙個鬱悶的問題,在有些機型上面使用pendingintent.getactivity context,0,intent,0 的方式開啟乙個指定的activity後,通知欄並不主動 摺疊,讓我一度的以為使用pendingintent.getactivity 的方式無法開啟activity,...

android JPush自定義通知欄

官網詳解 先自定義receiver private static final string tag myreceiver override public void onreceive context context,intent intent else if jpushinte ce.action ...