欧美成人精品手机在线观看_69视频国产_动漫精品第一页_日韩中文字幕网 - 日本欧美一区二区

LOGO OA教程 ERP教程 模切知識(shí)交流 PMS教程 CRM教程 開(kāi)發(fā)文檔 其他文檔  
 
網(wǎng)站管理員

Android中為圖標(biāo)加上數(shù)字--用于未讀短信數(shù)提醒,待更新應(yīng)用數(shù)提醒等

admin
2014年11月24日 21:56 本文熱度 5781
在我們開(kāi)發(fā)一些如短消息、應(yīng)用商店等應(yīng)用時(shí),會(huì)考慮在短消息的圖標(biāo)上加上未讀短信的數(shù)量,在應(yīng)用商店上加上可以升級(jí)的應(yīng)用數(shù)量,這樣不占太大空間還能達(dá)到提示的目的。

本節(jié)就以一個(gè)展示手機(jī)內(nèi)聯(lián)系人數(shù)量的例子來(lái)演示怎么在一個(gè)圖標(biāo)的上面加上數(shù)字的例子,也就是一個(gè)數(shù)字overlay..做過(guò)google map開(kāi)發(fā)的知道overlay這個(gè)東西。。

一:你可學(xué)到



  1. 手機(jī)內(nèi)依據(jù)Uri查看聯(lián)系人

  2. 權(quán)限的添加

  3. 獲取手機(jī)內(nèi)任意一款應(yīng)用的應(yīng)用圖標(biāo)

  4. 對(duì)圖形的處理,如復(fù)制,為圖片加上覆蓋層--數(shù)字。

  5. 使用RemoteView自定義Notification

二:開(kāi)始行動(dòng)



  1. 新建名為NotificationIconCount的Android Project。附件中有最終版本的項(xiàng)目工程

  2. 首先修改AndroidManifest.xml,加入權(quán)限<uses-permission android:name="android.permission.READ_CONTACTS"></uses-permission>,因?yàn)槲覀円x取聯(lián)系人。

  3. 修改main.xml如下,這里定義一個(gè)ImageView,勇于預(yù)覽我們處理好的加上數(shù)字的圖標(biāo)。



    Xml代碼 收藏代碼


    1. <?xml version="1.0" encoding="utf-8"?>

    2. <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"

    3. android:orientation="vertical"

    4. android:layout_width="fill_parent"

    5. android:layout_height="fill_parent"

    6. >

    7. <ImageView

    8. android:id="@+id/icon"

    9. android:layout_width="wrap_content"

    10. android:layout_height="wrap_content"

    11. android:scaleType="center"

    12. android:adjustViewBounds="true"/>

    13. </LinearLayout>

  4. 先來(lái)獲取手機(jī)內(nèi)通訊錄的圖標(biāo),如果沒(méi)有獲取到,則使用該應(yīng)用的圖標(biāo).



    Java代碼 收藏代碼


    1. super.onCreate(savedInstanceState);

    2. setContentView(R.layout.main);

    3. mImageView=(ImageView)findViewById(R.id.icon);

    4. //優(yōu)先采用聯(lián)系人的圖標(biāo),如果不存在則采用該應(yīng)用的圖標(biāo)

    5. Drawable contactIcon;

    6. try {

    7. contactIcon = getPackageManager().getApplicationIcon("com.android.contacts");

    8. } catch (NameNotFoundException e) {

    9. contactIcon=null;

    10. }

    11. Bitmap icon;

    12. if(contactIcon instanceof BitmapDrawable){

    13. icon=((BitmapDrawable)contactIcon).getBitmap();

    14. }else{

    15. icon=getResIcon(getResources(), R.id.icon);

    16. }
    這里用到一個(gè)自定義的根據(jù)資源圖標(biāo)id獲取圖片的函數(shù),很簡(jiǎn)單,代碼如下:


    Java代碼 收藏代碼


    1. /**

    2. * 根據(jù)id獲取一個(gè)圖片

    3. * @param res

    4. * @param resId

    5. * @return

    6. */

    7. private Bitmap getResIcon(Resources res,int resId){

    8. Drawable icon=res.getDrawable(resId);

    9. if(icon instanceof BitmapDrawable){

    10. BitmapDrawable bd=(BitmapDrawable)icon;

    11. return bd.getBitmap();

    12. }else{

    13. return null;

    14. }

    15. }

  5. 獲取到圖標(biāo)之后就要對(duì)這個(gè)圖標(biāo)進(jìn)行處理了,要為該圖標(biāo)加上聯(lián)系人數(shù)量的覆蓋,首先我們看獲取聯(lián)系人個(gè)數(shù)的函數(shù)。



    Java代碼 收藏代碼


    1. /**

    2. * 獲取聯(lián)系人的個(gè)數(shù)

    3. * @return 手里通訊錄中聯(lián)系人的個(gè)數(shù)

    4. */

    5. private int getContactCount(){

    6. Cursor c=getContentResolver().query(ContactsContract.Contacts.CONTENT_URI, new String[]{ContactsContract.Contacts._COUNT}, null, null, null);

    7. try{

    8. c.moveToFirst();

    9. return c.getInt(0);

    10. }catch(Exception e){

    11. return 0;

    12. }finally{

    13. c.close();

    14. }

    15. }
    這里采用Uri的方式獲取聯(lián)系人的cursor,然后獲取個(gè)數(shù)。

  6. 有了圖標(biāo)和聯(lián)系人個(gè)數(shù)就可以生成帶聯(lián)系人個(gè)數(shù)的圖標(biāo)了,我們看下生成的這個(gè)函數(shù)。



    Java代碼 收藏代碼


    1. /**

    2. * 在給定的圖片的右上角加上聯(lián)系人數(shù)量。數(shù)量用紅色表示

    3. * @param icon 給定的圖片

    4. * @return 帶聯(lián)系人數(shù)量的圖片

    5. */

    6. private Bitmap generatorContactCountIcon(Bitmap icon){

    7. //初始化畫(huà)布

    8. int iconSize=(int)getResources().getDimension(android.R.dimen.app_icon_size);

    9. Log.d(TAG, "the icon size is "+iconSize);

    10. Bitmap contactIcon=Bitmap.createBitmap(iconSize, iconSize, Config.ARGB_8888);

    11. Canvas canvas=new Canvas(contactIcon);


    12. //拷貝圖片

    13. Paint iconPaint=new Paint();

    14. iconPaint.setDither(true);//防抖動(dòng)

    15. iconPaint.setFilterBitmap(true);//用來(lái)對(duì)Bitmap進(jìn)行濾波處理,這樣,當(dāng)你選擇Drawable時(shí),會(huì)有抗鋸齒的效果

    16. Rect src=new Rect(0, 0, icon.getWidth(), icon.getHeight());

    17. Rect dst=new Rect(0, 0, iconSize, iconSize);

    18. canvas.drawBitmap(icon, src, dst, iconPaint);


    19. //在圖片上創(chuàng)建一個(gè)覆蓋的聯(lián)系人個(gè)數(shù)

    20. int contacyCount=getContactCount();

    21. //啟用抗鋸齒和使用設(shè)備的文本字距

    22. Paint countPaint=new Paint(Paint.ANTI_ALIAS_FLAG|Paint.DEV_KERN_TEXT_FLAG);

    23. countPaint.setColor(Color.RED);

    24. countPaint.setTextSize(20f);

    25. countPaint.setTypeface(Typeface.DEFAULT_BOLD);

    26. canvas.drawText(String.valueOf(contacyCount), iconSize-18, 25, countPaint);

    27. return contactIcon;

    28. }
    注釋的很詳細(xì),就不解釋了,無(wú)非就是定義一個(gè)畫(huà)布(Canvas),然后在上面畫(huà)圖標(biāo),畫(huà)數(shù)字文本。

  7. 然后我們把得到的這個(gè)處理過(guò)的Bitmap放在我們?cè)趍ain.xml里定義的ImageView里展示就可以看到效果了.



    Java代碼 收藏代碼


    1. mImageView.setImageBitmap(contactCountIcon);

  8. 我們啟動(dòng)應(yīng)用看看效果.

    我們看到了,右上角紅色的1代表我手機(jī)中有一個(gè)聯(lián)系人

三:采用狀態(tài)欄通知的辦法展示聯(lián)系人的數(shù)量



  1. 如果我們監(jiān)聽(tīng)未讀短信的數(shù)量,展示在狀態(tài)欄通知了,就可以用這個(gè)方法,我這里還是以聯(lián)系人的數(shù)量為例

  2. 由于Notification默認(rèn)的icon字段使用的是一個(gè)一個(gè)資源的引用類(lèi)型int,所以我們這里采用RemoteView的方式自定義Notification。定義RemoteView,需要一個(gè)layout,用于定義展示的Notification樣式,我們新建一個(gè)notification.xml布局文件如下:


    Java代碼 收藏代碼


    1. <?xml version="1.0" encoding="utf-8"?>

    2. <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"

    3. android:orientation="horizontal"

    4. android:layout_width="fill_parent"

    5. android:layout_height="fill_parent"

    6. android:padding="3dp"

    7. >

    8. <ImageView android:id="@+id/image"

    9. android:layout_width="wrap_content"

    10. android:layout_height="fill_parent"

    11. android:layout_marginRight="10dp"

    12. />

    13. <TextView android:id="@+id/text"

    14. android:layout_width="wrap_content"

    15. android:layout_height="fill_parent"

    16. android:textColor="#000"

    17. />

    18. </LinearLayout>
    很簡(jiǎn)單,一個(gè)ImageView和一個(gè)TextView,用于顯示提示的圖標(biāo)和文字。

  3. 要想使用Notification,我們必須獲取一個(gè)Service--NotificationManager,Android中由它來(lái)管理我們的Notification,獲取NotificationManager的代碼如下,卸載onCreate方法里



    Java代碼 收藏代碼


    1. nm=(NotificationManager)getSystemService(Context.NOTIFICATION_SERVICE);

  4. 然后緊接著我們就調(diào)用我們定義好的方法來(lái)顯示通知:



    Java代碼 收藏代碼


    1. showNotifacation(contactCountIcon);

  5. 下面我們看一下方法showNotifacation的具體實(shí)現(xiàn):



    Java代碼 收藏代碼


    1. /**

    2. * 顯示狀態(tài)欄通知

    3. * @param icon 通知內(nèi)容圖標(biāo)

    4. */

    5. private void showNotifacation(Bitmap icon){

    6. Notification notification=new Notification(R.drawable.icon,"聯(lián)系人數(shù)量",System.currentTimeMillis());

    7. //使用RemoteView自定義通知視圖

    8. RemoteViews contentView=new RemoteViews(getPackageName(), R.layout.notification);

    9. contentView.setImageViewBitmap(R.id.image, icon);

    10. contentView.setTextViewText(R.id.text, "圖標(biāo)上的紅色數(shù)字表示手機(jī)中聯(lián)系人的數(shù)量");

    11. notification.contentView=contentView;

    12. Intent notificationIntent=new Intent(this, NotificationIconActivity.class);

    13. PendingIntent contentIntent=PendingIntent.getActivity(this, 0, notificationIntent, 0);

    14. notification.contentIntent=contentIntent;

    15. nm.notify(NOTIFICATION_CONTACT_ID, notification);

    16. }
    注釋的都很詳細(xì),就不一一解釋了

  6. 最后的就是重寫(xiě)onDestroy,在Android銷(xiāo)毀該Activity的時(shí)候清除我們的通知。


    Java代碼 收藏代碼


    1. @Override

    2. protected void onDestroy() {

    3. super.onDestroy();

    4. nm.cancel(NOTIFICATION_CONTACT_ID);

    5. }

  7. 運(yùn)行,可以看到如下效果

    可以看到,效果已經(jīng)出來(lái)了。。

四:小結(jié)和一點(diǎn)引申


這結(jié)的主要關(guān)鍵還是對(duì)圖片的處理,比如這里的加上數(shù)字,當(dāng)時(shí)你也可以加上其他的東西,Canvas里有很多相應(yīng)的函數(shù)可以使用。。



這里說(shuō)的都是應(yīng)用內(nèi)、狀態(tài)通知等一些顯示處理后圖片的辦法,那么有沒(méi)有方法處理手機(jī)主屏幕上的圖標(biāo)的辦法,為他們加上數(shù)字呢。比如在短信息的應(yīng)用圖標(biāo)的右上角加上未讀短信數(shù)目等,答案是有的,不過(guò)是迂回實(shí)現(xiàn)的,給個(gè)思路就是使用AppWidget,這個(gè)可以實(shí)現(xiàn),還能動(dòng)態(tài)更新,具體怎么實(shí)現(xiàn),大家可以自己摸索下,這里只提供個(gè)思路,整體和這節(jié)的例子差不多,只不過(guò)呢,要做成AppWidget。。。




該文章在 2014/11/24 21:56:52 編輯過(guò)
關(guān)鍵字查詢
相關(guān)文章
正在查詢...
點(diǎn)晴ERP是一款針對(duì)中小制造業(yè)的專(zhuān)業(yè)生產(chǎn)管理軟件系統(tǒng),系統(tǒng)成熟度和易用性得到了國(guó)內(nèi)大量中小企業(yè)的青睞。
點(diǎn)晴PMS碼頭管理系統(tǒng)主要針對(duì)港口碼頭集裝箱與散貨日常運(yùn)作、調(diào)度、堆場(chǎng)、車(chē)隊(duì)、財(cái)務(wù)費(fèi)用、相關(guān)報(bào)表等業(yè)務(wù)管理,結(jié)合碼頭的業(yè)務(wù)特點(diǎn),圍繞調(diào)度、堆場(chǎng)作業(yè)而開(kāi)發(fā)的。集技術(shù)的先進(jìn)性、管理的有效性于一體,是物流碼頭及其他港口類(lèi)企業(yè)的高效ERP管理信息系統(tǒng)。
點(diǎn)晴WMS倉(cāng)儲(chǔ)管理系統(tǒng)提供了貨物產(chǎn)品管理,銷(xiāo)售管理,采購(gòu)管理,倉(cāng)儲(chǔ)管理,倉(cāng)庫(kù)管理,保質(zhì)期管理,貨位管理,庫(kù)位管理,生產(chǎn)管理,WMS管理系統(tǒng),標(biāo)簽打印,條形碼,二維碼管理,批號(hào)管理軟件。
點(diǎn)晴免費(fèi)OA是一款軟件和通用服務(wù)都免費(fèi),不限功能、不限時(shí)間、不限用戶的免費(fèi)OA協(xié)同辦公管理系統(tǒng)。
Copyright 2010-2025 ClickSun All Rights Reserved