小编Ion*_*nut的帖子

Jetpack Compose Material3 拉动刷新功能

我正在尝试按照本指南将项目从 Material2 规范迁移到 Material 3 撰写库。

目前Material2中的LazyColumn已经集成了Pull刷新功能,可以在这里找到

但是,我没有找到 Material3 的任何此类功能。这里有一个开放的问题跟踪器,但他们说这个功能只会在今年年中才会被考虑,等待的时间太长了。

有谁知道这种情况应该如何处理?拉动刷新是我们应用程序用户流程的重要流程,因此没有它不是一个选项。

accompanist/swipeToRefresh即使它已被弃用,我们还应该使用吗?

我还不精通编写自定义组合组件,因此任何帮助解决这个问题的帮助将不胜感激

android material-design android-jetpack-compose android-jetpack-compose-material3

16
推荐指数
1
解决办法
7174
查看次数

将“androidResources”无压缩选项添加到 Android Library Gradle 时出错

我正在尝试将以下选项添加到Android 库的gradle.kts文件中

android{
        androidResources {
        noCompress += "tflite"
    }
}
Run Code Online (Sandbox Code Playgroud)

但由于某种原因,每当我尝试同步项目时,我都会收到此错误

  • 出了什么问题:类 com.android.build.gradle.internal.dsl.AaptOptions$AgpDecolated_Decolated 无法转换为类 com.android.build.api.dsl.LibraryAndroidResources (com.android.build.gradle.internal.dsl.AaptOptions $AgpDecolated_Decolated 和 com.android.build.api.dsl.LibraryAndroidResources 位于加载器 org.gradle.internal.classloader.VisitableURLClassLoader @481a697b 的未命名模块中)

有人知道我该如何解决这个问题吗?互联网在这里似乎没有用。

像这样使用已弃用的旧版本不会产生任何错误

aaptOptions{
    noCompress += "tflite"
}
Run Code Online (Sandbox Code Playgroud)

我正在使用 Android Gradle 插件 8.1.0-beta05 和 gradle 包装器 8.0,但与 AGP 8.1.0-beta04 的行为相同

这是 gradle.kts 文件:

@Suppress("DSL_SCOPE_VIOLATION") // TODO: Remove once KTIJ-19369 is fixed
plugins {
    alias(libs.plugins.com.android.library)
    alias(libs.plugins.org.jetbrains.kotlin.android)
}

android {
    namespace = "com.example.mylibrary"
    compileSdk = 33

    defaultConfig {
        minSdk = 26

        testInstrumentationRunner = "androidx.test.runner.AndroidJUnitRunner"
        consumerProguardFiles("consumer-rules.pro")
    }

    buildTypes {
        release …
Run Code Online (Sandbox Code Playgroud)

android android-gradle-plugin gradle-kotlin-dsl

9
推荐指数
1
解决办法
1363
查看次数

如何在运行时更改 Android 12“neverForLocation”BLUETOOTH_SCAN 权限标志

我正在开发一个使用蓝牙的 Android 应用程序,我想使用新的 Android 12 Bluetooth_SCAN 和 CONNECT 权限来消除对位置权限的需要

<uses-permission android:name="android.permission.BLUETOOTH_SCAN" android:usesPermissionFlags="neverForLocation" />

如蓝牙文档所示

问题是,该应用程序有一项主要功能和一项可选功能。主要功能在这些权限下运行良好。

然而,可选功能使用信标扫描。当使用“neverForLocation”标志时,Android 操作系统会从扫描中过滤掉这些信标。

注意:如果您在 android:usesPermissionFlags 中包含 neverForLocation,则会从扫描结果中过滤掉一些 BLE 信标。

如果从清单权限中删除了该标志,则在扫描期间会出现信标。

但是,如果我从清单中删除此标志,那么即使不想使用此功能的用户也必须提供位置权限,否则正常的 BLEScan 不会返回任何内容。这是我想避免提供的事实,即这些新权限的全部原因是避免询问用户位置。

有没有办法在向操作系统发出实际运行时请求权限时提供此标志,而不是在清单中声明它?任何帮助或想法表示赞赏。

android android-permissions android-bluetooth android-12

8
推荐指数
0
解决办法
2859
查看次数

Jetpack Compose wrapContentHeight/ heightIn 在按钮周围添加额外的空间

我正在学习 Jetpack Compose,并且创建了几组按钮作为练习。

这是按钮

@Composable
fun MyButton(
    text: String,
    modifier: Modifier = Modifier,
    isEnabled: Boolean = true,
    onClick: () -> Unit,
) {

        Button(
            enabled = isEnabled,
            onClick = { onClick() },
            modifier = modifier.width(270.dp).wrapContentHeight(),
        ) {
            Text(
                text = text,
                style = MaterialTheme.typography.button
            )
        }
    
}
Run Code Online (Sandbox Code Playgroud)

问题是,如果我将按钮的高度设置为wrapContentHeight或使用heightIn不同的最大值和最小值,则 compose 会自动在按钮周围添加一个空格,如此处所示

预览按钮换行内容高度

但是如果我删除 WrapContent 并使用固定高度,或者定义相同的最小和最大高度,heightIn则不会出现此问题

@Composable
fun MyButton(
    text: String,
    modifier: Modifier = Modifier,
    isEnabled: Boolean = true,
    onClick: () -> Unit,
) {

        Button(
            enabled …
Run Code Online (Sandbox Code Playgroud)

android kotlin android-jetpack-compose

6
推荐指数
1
解决办法
1482
查看次数