Jetpack Compse Glance Widget API 33 在 API 30 作品上不可调整大小

问题描述 投票:0回答:1

我正在一目了然地创建应用程序小部件。在我的个人电话上,API 30 resizable 在模拟器上工作 API 33 或 32 resizable 不起作用。

是模拟器问题吗?但是可调整大小的 Google Chrome 小部件有效。

xml/widget_info.xml

<?xml version="1.0" encoding="utf-8"?>
<appwidget-provider xmlns:android="http://schemas.android.com/apk/res/android"
    android:description="@string/app_name"
    android:initialLayout="@layout/loader"
    android:minWidth="80dp"
    android:minHeight="80dp"
    android:minResizeWidth="40dp"
    android:minResizeHeight="40dp"
    android:previewImage="@drawable/widget"
    android:resizeMode="horizontal|vertical"
    android:widgetCategory="home_screen" />

xml-v31/widget_info.xml

<?xml version="1.0" encoding="utf-8"?>
<appwidget-provider xmlns:android="http://schemas.android.com/apk/res/android"
    android:previewLayout="@layout/widget_preview"
    android:targetCellWidth="3"
    android:targetCellHeight="2"
    android:description="@string/widget_description"/>

glance 应用程序小部件

import androidx.compose.runtime.Composable
import androidx.compose.ui.unit.DpSize
import androidx.compose.ui.unit.dp
import androidx.glance.GlanceModifier
import androidx.glance.ImageProvider
import androidx.glance.LocalContext
import androidx.glance.LocalSize
import androidx.glance.appwidget.GlanceAppWidget
import androidx.glance.appwidget.GlanceAppWidgetReceiver
import androidx.glance.appwidget.SizeMode
import androidx.glance.appwidget.cornerRadius
import androidx.glance.background
import androidx.glance.layout.fillMaxSize
import androidx.glance.layout.padding
import androidx.glance.state.GlanceStateDefinition
import androidx.glance.state.PreferencesGlanceStateDefinition

class MyWidget : GlanceAppWidget() {
    override var stateDefinition: GlanceStateDefinition<*> = PreferencesGlanceStateDefinition

    override val sizeMode: SizeMode = SizeMode.Responsive(
        setOf(SMALL_SQUARE, HORIZONTAL_RECTANGLE, BIG_SQUARE)
    )

    @Composable
    override fun Content() {
        val size = LocalSize.current
        val context = LocalContext.current
        MyContent(
            modifier = GlanceModifier
                .fillMaxSize()
                .background(ImageProvider(R.drawable.bg_widget))
                .cornerRadius(16.dp)
                .padding(8.dp)
        )
    }

    companion object {
        const val WATER_WIDGET_PREFS_KEY = "WATER_WIDGET_PREFS_KEY"

        private val SMALL_SQUARE = DpSize(100.dp, 100.dp)
        private val HORIZONTAL_RECTANGLE = DpSize(250.dp, 100.dp)
        private val BIG_SQUARE = DpSize(250.dp, 250.dp)
    }
}

class MyWidgetReceiver : GlanceAppWidgetReceiver() {
    override val glanceAppWidget: GlanceAppWidget = MyWidget ()
}

AndroidMAnifest.xml

        <receiver
            android:name=".ui.widget.MyWidgetReceiver"
            android:enabled="@bool/glance_appwidget_available"
            android:exported="false">
            <intent-filter>
                <action android:name="android.appwidget.action.APPWIDGET_UPDATE" />
            </intent-filter>

            <meta-data
                android:name="android.appwidget.provider"
                android:resource="@xml/widget_info" />
        </receiver>

API 33 |我的小部件 |谷歌浏览器小部件 | | ------ | ------ | | | |

API 30 在这个手机上我有可调整大小的指示器并且也是可调整大小的。

android kotlin android-jetpack-compose android-widget glance-appwidget
1个回答
0
投票

XML 文件夹内的文件之间没有层次结构。这不像风格。

您可以复制 xml-v31 中的所有字段,或者只添加基本 XML 中的所有内容并忽略更高 API 的警告。

© www.soinside.com 2019 - 2024. All rights reserved.