如何在Complications列表中设置显示图标?解决无图标异常
问题:Complications列表无法显示图标,其他位置显示正常
我的图标在应用列表、表盘Complications圆环顶部都能正常显示,但在Complications列表里完全看不到图标。以下是我的Complications实现代码和相关情况:
代码实现
class MainComplicationService : SuspendingComplicationDataSourceService() { override fun getPreviewData(type: ComplicationType): ComplicationData? { if (type != ComplicationType.SHORT_TEXT) { return null } return createAppShortcutComplication() } override suspend fun onComplicationRequest(request: ComplicationRequest): ComplicationData { return createAppShortcutComplication() } private fun createAppShortcutComplication(): ComplicationData { val newsIcon = Icon.createWithResource(this, R.drawable.news) val intent = Intent(this, MiniNewsWearActivity::class.java).apply { component = ComponentName(this@MainComplicationService, MiniNewsWearActivity::class.java) } val pendingIntent = PendingIntent.getActivity(this, 0, intent, PendingIntent.FLAG_UPDATE_CURRENT) return ShortTextComplicationData.Builder( text = PlainComplicationText.Builder("NEWS").build(), contentDescription = ComplicationText.EMPTY, ) .setMonochromaticImage( MonochromaticImage.Builder( newsIcon ).build() ) .setTitle(PlainComplicationText.Builder("MINI").build()) .setTapAction(pendingIntent) .build() }
显示情况
- 应用列表图标显示正常
- 表盘Complications圆环顶部小图标显示正常
- Complications列表无图标显示
解决方法
Complications列表显示的图标不是从ComplicationData里的monochromaticImage读取的,而是需要在Complication数据源服务的AndroidManifest.xml配置中指定android:icon属性,同时要确保图标符合Wear OS规范:
- 在Manifest中配置服务图标
找到你的MainComplicationService注册项,添加android:icon指向你的图标资源:
<service android:name=".MainComplicationService" android:icon="@drawable/news" <!-- 添加这行指定图标 --> android:permission="com.google.android.wearable.permission.BIND_COMPLICATION_PROVIDER"> <intent-filter> <action android:name="android.support.wearable.complications.action.DATA_SOURCE" /> </intent-filter> <meta-data android:name="android.support.wearable.complications.SUPPORTED_TYPES" android:value="short_text" /> <!-- 其他已有的meta-data配置 --> </service>
- 检查图标资源规范
确保你的news图标满足Wear OS的要求:
- 推荐尺寸:mdpi(48x48dp)、hdpi(72x72dp)、xhdpi(96x96dp)、xxhdpi(144x144dp)
- 采用单色设计(列表会统一调整图标色调),避免过多复杂色彩
原理说明
Complications列表展示的是数据源服务的标识图标,而非表盘上显示的Complication内容图标,所以必须通过Manifest配置服务的android:icon才能让列表正确显示图标。
内容的提问来源于stack exchange,提问作者elliptic1
相关产品推荐
相关产品推荐

