在開發或定制 Android 系統 Launcher 時,開發者常需將自訂小部件(Widget)預置到工作區。許多開發者會直接修改 default_workspace.xml,卻發現小部件始終不顯示。本文將針對此現象進行原因分析與解決方案說明。
<appwidget
launcher:packageName="com.carl.android.music.ui.SLMusicWidget"
launcher:className="com.carl.android.music.ui"
launcher:screen="1"
launcher:x="1"
launcher:y="1"
launcher:spanX="4"
launcher:spanY="1" />
packageName 應為小部件所在的完整包名,className 應為繼承自 AppWidgetProvider 的具體類名。範例中 className 似乎缺少具體類名(如 SLMusicWidget),導致系統找不到對應組件。AndroidManifest.xml 中已正確註冊 <receiver> 並包含 <intent-filter> 與 <meta-data android:name="android.appwidget.provider" android:resource="@xml/widget_info" />。minWidth/minHeight 或 minResizeWidth/minResizeHeight 需與 spanX/spanY 所佔格子大小相容。default_workspace.xml 的解析邏輯可能不同,建議參考對應源碼中的 WorkspaceParser 或 DefaultLayoutParser。BIND_APPWIDGET 權限。adb logcat | grep -i appwidget)觀察是否有 AppWidgetHost 綁定失敗訊息。launcher:screen、x、y 是否超出當前工作區網格範圍。小部件不顯示多數源於 className 不完整、Manifest 缺失聲明或尺寸不匹配。建議先補全類名、驗證 Manifest 與 widget_info.xml,再結合日誌定位具體解析錯誤。