Android之Widget小元件
下面是我學習Widget的一些筆記:
一、特點:
1.快捷方便
2.個性化定製和功能
3.及時控制更新顯示內容
二、步驟:
1.繪製Widget佈局
2.配置基本屬性
3.定義AppWidgetProvider
4.提供Service或其他,在provider呼叫
三、如何顯示具體內容
1.建立一個RemoveViews物件,建立該物件時可以指定載入指定的介面佈局檔案
2.如果需要改變上一步所載入的介面佈局檔案的內容(主要包含ImageView和TextView兩種元件),則可通過RemoteViews物件進行修改
3.建立一個ComponentName物件
4.呼叫AppWidgetManager更新桌面控制元件
example:
1.layout中建立widget.xml頁面
加入一個顯示時間的TextView
2.建立xml目錄並建立widget的屬性檔案寬度,高度,佈局,重新整理時間
新建xml/widgetconfig.xml,選擇appwidget-provider:
<?xml version="1.0" encoding="utf-8"?>
3.建立Provider類繼承AppWidgetProvider重寫onEnabled(context.startServices()),onDisabled(context.deleteServices()),onDeleted(),onUpdated()
<appwidget-provider xmlns:android="http://schemas.android.com/apk/res/android"
android:initialLayout="@layout/widget"
android:minHeight="40dp"
android:minWidth="100dp"
android:updatePeriodMillis="864000" >
<!-- 主要設定的引數如下:
minWidth: 定義Wdiget元件的寬度
minHeight: 定義Wdiget元件的高度
updatePeriodMillis: 更新的時間週期
initialLayout: Widget的佈局檔案 -->
minWidth: 定義Wdiget元件的寬度
minHeight: 定義Wdiget元件的高度
updatePeriodMillis: 更新的時間週期
initialLayout: Widget的佈局檔案 -->
</appwidget-provider>
public class WidgetProvider extends AppWidgetProvider {
4.在包下建立TimerService類繼承Service類重寫onCreate(),onDestroy():
@Override
public void onDeleted(Context context, int[] appWidgetIds) {
// TODO Auto-generated method stub
super.onDeleted(context, appWidgetIds);
// Widget從螢幕移除
}
@Override
public void onDisabled(Context context) {
// TODO Auto-generated method stub
super.onDisabled(context);
// 最後一個Widget被從螢幕移除執行
context.stopService(new Intent(context, TimerSerivce.class));
}
@Override
public void onEnabled(Context context) {
// TODO Auto-generated method stub
super.onEnabled(context);
// 第一個Widget新增到螢幕上執行
context.startService(new Intent(context, TimerSerivce.class));
}
@Override
public void onReceive(Context context, Intent intent) {
// TODO Auto-generated method stub
super.onReceive(context, intent);
}
@Override
public void onUpdate(Context context, AppWidgetManager appWidgetManager,
int[] appWidgetIds) {
// TODO Auto-generated method stub
super.onUpdate(context, appWidgetManager, appWidgetIds);
// 重新整理widget
// 通過remoteView和AppWidgetManager
}
}
public class TimerSerivce extends Service {
private Timer timer;
private SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
@Override
public IBinder onBind(Intent intent) {
// TODO Auto-generated method stub
return null;
}
@Override
public void onCreate() {
// TODO Auto-generated method stub
super.onCreate();
timer = new Timer();
timer.schedule(new TimerTask() {
@Override
public void run() {
// TODO Auto-generated method stub
updateViews();
}
}, 0, 1000);
}
private void updateViews() {
String time = sdf.format(new Date());
RemoteViews rv = new RemoteViews(getPackageName(), R.layout.widget);
rv.setTextViewText(R.id.text, time);
AppWidgetManager manager = AppWidgetManager
.getInstance(getApplicationContext());
ComponentName cn = new ComponentName(getApplicationContext(), WidgetProvider.class);
manager.updateAppWidget(cn, rv);
}
@Override
public void onDestroy() {
// TODO Auto-generated method stub
super.onDestroy();
timer = null;
}
}
5.修改清單檔案,新增許可權
<application
android:allowBackup="true"
android:icon="@drawable/ic_launcher"
android:label="@string/app_name"
android:theme="@style/AppTheme" >
<activity
android:name=".MainActivity"
android:label="@string/app_name" >
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<receiver android:name="com.example.widgetdemo.WidgetProvider" >
<intent-filter >
<action android:name="android.appwidget.action.APPWIDGET_UPDATE"/>
</intent-filter>
<meta-data android:name="android.appwidget.provider"
android:resource="@xml/widgetconfig"/>
</receiver>
<service android:name="com.example.widgetdemo.TimerSerivce" >
</service>
</application>
附:
Widget並不支援所有的佈局和控制元件,而僅僅只是支援Android佈局和控制元件的一個子集。
(01) App Widget支援的佈局:
FrameLayout
LinearLayout
RelativeLayout
GridLayout
(02) App Widget支援的控制元件:
AnalogClock
Button
Chronometer
ImageButton
ImageView
ProgressBar
TextView
ViewFlipper
ListView
GridView
StackView
AdapterViewFlipper
(01) App Widget支援的佈局:
FrameLayout
LinearLayout
RelativeLayout
GridLayout
(02) App Widget支援的控制元件:
AnalogClock
Button
Chronometer
ImageButton
ImageView
ProgressBar
TextView
ViewFlipper
ListView
GridView
StackView
AdapterViewFlipper
相關文章
- Widget小元件如何自適應高度元件
- IOS Widget(5):小元件重新整理機制iOS元件
- IOS小元件(8):App與Widget資料共享iOS元件APP
- Flutter(十一)之封裝幾個小WidgetFlutter封裝
- IOS Widget(3):SwiftUI開發小元件佈局入門iOSSwiftUI元件
- Flutter widget元件簡介Flutter元件
- iOS之widgetiOS
- IOS Widget(4-1):建立可配置小元件(靜態配置資料)iOS元件
- Flutter學習筆記(9)--元件WidgetFlutter筆記元件
- jqueryMobile Loader widget 控制元件改造jQuery控制元件
- Flutter小知識-- widget初窺Flutter
- iOS桌面小外掛 Widget ExtensioniOS
- Android元件化之(路由 vs 元件匯流排)Android元件化路由
- 微信小程式 MinUI 元件庫系列之 badge 徽章元件微信小程式UI元件
- 微信小程式 MinUI 元件庫系列之 avatar 頭像元件微信小程式UI元件
- Android通用UI元件之DialogAndroidUI元件
- Android之四大元件Android元件
- Android MD控制元件之CardViewAndroid控制元件View
- Flutter Widget之TextField使用解析Flutter
- Flutter之Widget大小與位置Flutter
- Flutter之可滑動WidgetFlutter
- Flutter快速上車之WidgetFlutter
- 安卓開發之 App Widget安卓APP
- 微信小程式 MinUI 元件庫系列之 elip 文字截斷元件微信小程式UI元件
- Vue元件之間傳值完整小結Vue元件
- 微信小程式之倒數計時元件微信小程式元件
- c#之引用office功能元件_小記C#元件
- android.widget.PopupWindow,生成DialogAndroid
- Android控制元件重疊顯示小記Android控制元件
- Mac天氣預報元件:Weather Widget Live for MacMac元件
- Android 四大元件之 ServiceAndroid元件
- Android 四大元件之 ActivityAndroid元件
- 剖析 Android 架構元件之 ViewModelAndroid架構元件View
- Android Jetpack 架構元件之 NavigationAndroidJetpack架構元件Navigation
- Android Jetpack架構元件(七)之WorkManagerAndroidJetpack架構元件
- Android四大元件之ActivityAndroid元件
- Android 官方架構元件之 LifecycleAndroid架構元件
- Android 四大元件之" Service "Android元件