簡(jiǎn)單掌握Android Widget桌面小部件的創(chuàng)建步驟
一、Widget設(shè)計(jì)步驟
需要修改三個(gè)XML,一個(gè)class:
1.第一個(gè)xml是布局XML文件(如:main.xml),是這個(gè)widget的。一般來(lái)說(shuō)如果用這個(gè)部件顯示時(shí)間,那就只在這個(gè)布局XML中聲明一個(gè)textview就OK了。
2.第二個(gè)xml是widget_provider.xml,主要是用于聲明一個(gè)appwidget的。其中,Layout就是指定上面那個(gè)main.xml。
3.第三個(gè)xml是AndroidManifest.xml,注冊(cè)broadcastReceiver信息。
4.最后那個(gè)class用于做一些業(yè)務(wù)邏輯操作。讓其繼承類AppWidgetProvider。AppWidgetProvider中有許多方法,一般情況下我們只是覆寫onUpdate(Context,AppWidgetManager,int[])方法。
二、代碼案例
1.定義一個(gè)WidgetProvider, 用來(lái)處理Widget的一些CallBack
(1)OnEnable,創(chuàng)建第一個(gè)Widget時(shí)調(diào)用。
(2)OnDisable, 和OnEnable相反,創(chuàng)建最后一個(gè)Widget調(diào)用。
(3)OnDelete,Widget的一個(gè)實(shí)例被刪除時(shí)調(diào)用。
(4)OnUpdate,當(dāng)Widget需要更新它的View時(shí)調(diào)用。
(5)onReceive():此方法默認(rèn)情況下處理BroadcastReceiver行為,并調(diào)用上面的方法。
public class WidgetDemoAppWidgetProvider extends AppWidgetProvider{ public void onUpdate(Context context, AppWidgetManager appWidgetManager, int[] appWidgetIds) { final int N = appWidgetIds.length; // Perform this loop procedure for each App Widget that belongs to this provider for (int i=0; i<N; i++) { int appWidgetId = appWidgetIds[i]; Intent intent = new Intent(); PendingIntent pendingIntent = PendingIntent.getActivity(context, 0, intent, 0); RemoteViews views = new RemoteViews(context.getPackageName(), R.layout.widget_demo_layout); views.setOnClickPendingIntent(R.id.wap_app, pendingIntent); appWidgetManager.updateAppWidget(appWidgetId, views); } } }
2.在AndroidManifast.xml 注冊(cè)Provide
<receiver android:name="WidgetDemoAppWidgetProvider"> <intent-filter> <action android:name="android.appwidget.action.APPWIDGET_UPDATE" /> </intent-filter> <meta-data android:name="android.appwidget.provider" android:resource="@xml/widget_demo_appwidget_info" /> </receiver>
3.創(chuàng)建Widget配置XML在xml文件夾下:
<?xml version="1.0" encoding="utf-8"?> <appwidget-provider xmlns:android="http://schemas.android.com/apk/res/android" android:minWidth="60px" android:minHeight="60px" android:initialLayout="@layout/widget_demo_layout" > </appwidget-provider>
(4)創(chuàng)建Widget 的Layout
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="fill_parent" android:layout_height="fill_parent" > <ImageView android:id="@+id/wap_app" android:layout_width="wrap_content" android:layout_height="wrap_content" android:src="@drawable/icon"/> </LinearLayout>
相關(guān)文章
Android View與Compose互相調(diào)用實(shí)例探究
這篇文章主要介紹了Android View與Compose互相調(diào)用,Compose 具有超強(qiáng)的兼容性,兼容現(xiàn)有的所有代碼,Compose 能夠與現(xiàn)有 View 體系并存,可實(shí)現(xiàn)漸進(jìn)式替換2023-01-01Android 適配器模式應(yīng)用及設(shè)計(jì)原理
這篇文章主要介紹了Android 適配器模式應(yīng)用及設(shè)計(jì)原理的相關(guān)資料,Android開(kāi)發(fā)者應(yīng)該都知道適配器會(huì)用,但是不是多清楚原理,這里幫大家分析下原理,需要的朋友可以參考下2016-10-10Android基于wheelView實(shí)現(xiàn)自定義日期選擇器
這篇文章主要為大家詳細(xì)介紹了Android基于wheelView實(shí)現(xiàn)自定義日期選擇器,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2018-07-07Window下adb shell中文亂碼問(wèn)題解決方法
這篇文章主要介紹了Window下adb shell中文亂碼問(wèn)題解決方法,本文講解了出現(xiàn)這個(gè)問(wèn)題的原因以及解決方法,需要的朋友可以參考下2015-04-04Android實(shí)現(xiàn)創(chuàng)意LoadingView動(dòng)畫效果
這篇文章主要介紹了Android實(shí)現(xiàn)創(chuàng)意LoadingView動(dòng)畫效果的相關(guān)資料,需要的朋友可以參考下2016-02-02Android11及以上文件讀寫權(quán)限申請(qǐng)?jiān)敿?xì)介紹
安卓11改變了此前安卓系統(tǒng)對(duì)于文件管理的規(guī)則,在安卓 11 上,文件讀寫變成了特殊權(quán)限,下面這篇文章主要給大家介紹了關(guān)于Android11及以上文件讀寫權(quán)限申請(qǐng)的相關(guān)資料,需要的朋友可以參考下2022-08-08Android 實(shí)現(xiàn)圖片模糊、高斯模糊、毛玻璃效果的三種方法
在前幾天寫過(guò)一個(gè)使用glide-transformations的方法實(shí)現(xiàn)高斯模糊的方法,今天偶然間有發(fā)現(xiàn)一個(gè)大神寫的另一個(gè)方法,感覺(jué)挺不錯(cuò)的,分享一下2016-12-12item高度不同時(shí)Recyclerview獲取滑動(dòng)距離的方法
這篇文章主要介紹了item高度不同時(shí)Recyclerview獲取滑動(dòng)距離的方法,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2018-11-11Android 實(shí)現(xiàn)滑動(dòng)方法總結(jié)
這篇文章主要介紹了Android 實(shí)現(xiàn)滑動(dòng)方法總結(jié)的相關(guān)資料,需要的朋友可以參考下2017-07-07Android 開(kāi)發(fā)與代碼無(wú)關(guān)技巧詳解
這篇文章主要為大家介紹了Android 開(kāi)發(fā)與代碼無(wú)關(guān)技巧詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-12-12