小编Ahm*_*out的帖子

Jetpack Compose Canvas BlendMode.SRC_IN 甚至使背景透明

我尝试使用 BlendMode.SRC_IN 在 PNG 图像(具有透明背景)顶部添加覆盖颜色,但背景变为黑色,而不是设置的背景颜色,就像也屏蔽了背景像素一样。

@Composable
fun Icon(
        fraction: Float,
        image: ImageAsset,
        defaultColor: Color = Color(0xFFEEEEEE),
        progressColor: Color = Color(0xFF888888),
        size: Dp = image.width.dp
) {
    Box(modifier = Modifier.size(size = size)) {
        Canvas(modifier = Modifier.fillMaxSize()) {
            drawImage(
                    image = image,
                    dstSize = IntSize(
                            width = size.toIntPx(),
                            height = size.toIntPx()
                    ),
                    colorFilter = ColorFilter.tint(
                            color = defaultColor
                    ),
                    blendMode = BlendMode.Src
            )
            drawIntoCanvas {
                val paint = Paint().apply {
                    color = progressColor
                    blendMode = BlendMode.SrcIn
                }

                it.restore()
                it.drawRect(
                        rect = Rect( …
Run Code Online (Sandbox Code Playgroud)

android android-jetpack-compose

12
推荐指数
2
解决办法
5736
查看次数

使用 Compose 在导航中的 Composable 之间制作动画

我已经开始尝试使用导航进行撰写。

我创建了我的 2 Composables,一切正常。

但我缺少的是页面之间的动画(或过渡)。我没有找到任何资源指出如何在 Compose 中做到这一点。

我知道所有动画都基于 Compose 中的状态,但我唯一知道的是导航返回堆栈。

android android-jetpack-compose

11
推荐指数
4
解决办法
2222
查看次数

Jetpack Compose 中的行间距

有没有办法在Jetpack Compose中实现lineSpacing?类似于普通的 AndroidlineSpacingExtalineSpacingMuliplier?

我知道有lineHeightTextTextStyle但这不是同一回事。行高指定每行的大小,而不是行与下一行之间的间距。

例如,行高适用于最后一行,而行距则不适用,因为它后面没有 like

android android-jetpack-compose

10
推荐指数
1
解决办法
3784
查看次数

列不会滚动到焦点上的文本字段

我有一个很长的输入页面,TextField里面有多个 s 。但是,当TextField获得焦点时,键盘会出现,并且Column(即scrollable)不会滚动到特定的TextField,有时键盘会与字段重叠。

我试图看看这是否是 Android 问题,但不,在正常的 Android 视图中,焦点TextInputLayout会滚动ScrollView,以便显示。

我尝试在获得焦点RelocationRequester时在 Compose 中使用TextField,但它似乎没有做任何事情,而且它只有一种方法。

有解决办法吗?或者我是否需要等到 Focus 和 Relocation API 在 Compose 中稳定下来?

android android-jetpack-compose

6
推荐指数
0
解决办法
1396
查看次数

Jetpack Compose 中的过度滚动处理

我正在尝试在我的应用程序中创建一个下拉刷新逻辑。

我知道它从处理 Overscrolling 开始,但我似乎无法在 compose 中找到与 Overscrolling 有关的任何内容。

它还没有在 Compose 中实现吗?还是隐藏在某处?

我现在正在使用 LazyColumn,但在 LazyListState 中没有找到任何内容。

android android-jetpack-compose

5
推荐指数
1
解决办法
695
查看次数

禁用子 Compose 的嵌套滚动

我有一个可滚动列,其中有另一个可滚动列和一个 MapView。

由于 Compose 的默认行为是允许嵌套滚动,因此控制这两个也可以使用手势的子项有些困难。

我想做到这一点,以便当这些孩子收到指针事件时,他们自己处理它,并且永远不会将任何内容传递给父母。

没有未消耗的值或类似的东西。只要指针事件在它们的范围内,它们就会消耗掉所有事件。

我怎样才能做到这一点?

我试图研究 NestedScrolling,但这给了父级而不是子级更多的控制权。

关于指针事件的一些搜索引导我找到了一种解决方案,该解决方案禁用了孩子体内的所有手势。但我希望孩子能够理解并使用这些手势,而不是丢弃它们。

android android-jetpack-compose

5
推荐指数
1
解决办法
1301
查看次数

更改 PostMan 中的响应

我正在使用开放 API。

但我只使用了 API 提供的响应中的一小部分数据。当我使用具有不同参数的 API 进行测试以查看响应时。

我不想每次发送请求时都看到整个 API 响应,我只想查看我感兴趣的数据。

例如 :

响应有 3 个对象。StatusFeaturesData。但我只对对象感兴趣Data,我只想Data在发出请求时看到该对象

有没有办法使用请求的实际响应来打印不同的响应?

运行测试来验证数据,预请求脚本用于在请求之前执行某些操作,但我没有发现任何改变响应形式的内容。

postman

4
推荐指数
1
解决办法
5054
查看次数

Jetpack Compose 的工具栏结构化行为

想象一下 Android 中工具栏的常见行为。

Toolbar您在 中定义一个小部件Activity,并可以在片段内使用onCreateOptionsMenu和访问它。onOptionsItemSelected

然而,这样的事情对于普通的 Jetpack Compose 来说是不可能的,因为无法访问中Toolbar定义的。ActivityScaffold

所以想想这个场景。你有一个Activity, ,Scaffold里面有定义,还有一个NavHostthat Scaffold。包含NavHost应用程序的所有子页面(其他可组合项)。标题可以通过导航目标侦听器进行处理,剩下的就是工具栏的操作。

您将如何根据您所在的当前页面/可组合项更改工具栏操作?并处理这些操作的点击?

PS:在每个页面中使用工具栏并不是一个解决方案,因为在动画页面之间切换时,工具栏会消失并重新出现在每个页面上,这会导致糟糕的用户体验。

android android-jetpack-compose android-compose-appbar

4
推荐指数
1
解决办法
1599
查看次数

Jetpack Compose 中的边缘淡化行为

我有一个视图,有一排带有fadingEdge.

我正在 Compose 中重新实现该页面。但我不确定如何fadingEdge在 Compose 中实现该行为。

我会放置一个具有相同长度的垫片,并有一个渐变作为背景,但这看起来不像相同的效果。Android 效果一开始是不可见的,然后随着视图滚动开始拉伸以覆盖项目。垫片不是这样工作的。

android android-jetpack-compose

4
推荐指数
1
解决办法
2598
查看次数

在 Android 中保护 API 密钥

设想 :

假设您有一个在服务器上使用某些 API 的 Android 应用程序。

该应用程序没有登录功能(不需要它,因为用户在服务器上没有任何个人数据)

为了向服务器发送请求,您需要在服务器上创建 OAuth2 功能。您向服务器发出请求,它返回一个身份验证令牌。

但是,如果用户监视网络请求,则可以轻松接受此请求。因此,您创建了一个与 Auth 请求的 POST 正文一起发送的密钥。

问题从这里开始:

您创建的这个密钥必须保留在应用程序中,应用程序中的任何代码都可以分解(反编译)并且可以访问该密钥。

密钥不能在服务器上,否则需要一个请求来获取它,从而可以对其进行监控。

您不能以任何方式对其进行编码,因为解码功能必须在 Android 端,因此可以反编译。

问题:

有没有办法至少使密钥更难解码?

PS:使用 R8 或 Proguard 只会模糊代码。如果黑客或攻击者尝试,他们可以很容易地看到应用程序的整个代码,并可以跟随以了解编码或解码的流程,或找到代码中的关键。

security android

2
推荐指数
1
解决办法
1263
查看次数

房间数据库观察者

在 Room 数据库中,我想添加一些观察者,其中的通知如下:删除、插入、更新。

我确实通过创建一个接口来实现这一点,然后适配器实现它。因此,每次一个数据库事务结束时,都会在适配器上执行一次匹配操作。

但我不确定这是否是正确的方法,也许 rxjava 有某种方法可以做到这一点?或者也许是 RecyclerView 中的 DiffUtil?

java android rx-java2 android-room

0
推荐指数
1
解决办法
4864
查看次数