相关疑难解决方法(0)

如何控制 Jetpack Compose 中的 DropDownMenu 位置

我有一行在开头对齐文本,在结尾对齐图像。当我按下图像时,我会显示一个下拉菜单,但它出现在行的开头,我希望它出现在行的末尾。

我尝试在 Modifier 组件中使用 Alignment.centerEnd 但不起作用。

我怎样才能让弹出窗口出现在行的末尾?

@Composable
fun DropdownDemo(currentItem: CartListItems) {
    var expanded by remember { mutableStateOf(false) }
    Box(modifier = Modifier
        .fillMaxWidth()) {
        Text(modifier = Modifier.align(Alignment.TopStart),
            text = currentItem.type,
            color = colorResource(id = R.color.app_grey_dark),
            fontSize = 12.sp)
        Image(painter = painterResource(R.drawable.three_dots),
            contentDescription = "more options button",
            Modifier
                .padding(top = 5.dp, bottom = 5.dp, start = 5.dp)
                .align(Alignment.CenterEnd)
                .width(24.dp)
                .height(6.75.dp)
                .clickable(indication = null,
                    interactionSource = remember { MutableInteractionSource() },
                    onClick = {
                        expanded = true
                    }))
        DropdownMenu(
            expanded = expanded,
            onDismissRequest …
Run Code Online (Sandbox Code Playgroud)

android kotlin android-jetpack-compose composable

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

如何使用触摸事件在 Jetpack Compose Canvas 上绘图?

这是问答式的问题,因为我正在寻找使用 Jetpack Canvas 的绘图示例,但在 stackoverflow 上有问题,这个另一个,我发现可以使用pointerInteropFilter像 View 那样的绘图onTouchEvent MotionEvent,根据文档,这是不建议的

一个特殊的 PointerInputModifier,提供对最初调度到 Compose 的底层 MotionEvent 的访问。优先选择pointerInput ,并且仅将其用于与使用MotionEvents 的现有代码的互操作。

虽然此修饰符的主要目的是允许任意代码访问分派给 Compose 的原始 MotionEvent,但为了完整性,提供了类似物以允许任意代码与系统交互,就好像它是 Android 视图一样。

android android-jetpack-compose android-jetpack-compose-canvas

11
推荐指数
1
解决办法
5424
查看次数

停止 Jetpack Compose pointInteropFilter 消耗输入事件

我有一个Column有两个孩子的垂直项目:

  1. 一个Pager可组合项(来自伴奏者),显示Text.
  2. Canvas绘制两个圆弧和一个圆的可组合项。

它们的排序顺序与此处描述的顺序相同。我希望Text始终渲染在Canvas.


实施细节

可组合项Canvas具有Modifier.pointerInteropFilter处理MotionEvent.ACTION_DOWN和 的MotionEvent.ACTION_MOVE。如果事件不在弧的 10% 距离内,则忽略并false返回该事件。

我的理解是返回false将表明该事件尚未被消耗,因此将被传递以进行Pager处理 - 但事实并非如此。一旦Modifier.pointerInteropFilter被注册, 就Pager永远不会接收输入事件,无论返回truefalse


布局

为了简洁起见,下面是我当前实现的简化版本。我有一个Column渲染第Pager一个,然后渲染Canvas.

Column(
    modifier = Modifier.fillMaxSize(),
    verticalArrangement = Arrangement.Center
) {
    // The Pager should always be rendered behind the Canvas. This is to
    // prevent …
Run Code Online (Sandbox Code Playgroud)

android kotlin android-jetpack android-jetpack-compose

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

如何检测 Jetpack Compose 按钮​​后面的视图的点击?

以下代码适用于 Jetbrains Desktop Compose。它显示了一张带有按钮的卡片,现在如果您单击该卡片,“单击的卡片”将回显到控制台。如果您单击该按钮,它将回显“已单击按钮”

但是,我正在寻找一种方法让卡检测按钮的点击。我想在不更改按钮的情况下执行此操作,这样按钮就不需要知道它所在的卡。我希望这样做,以便卡片知道其表面上的某些内容已被处理,例如显示不同颜色的边框。

期望的结果是,当您单击按钮时,日志将回显“单击卡”和“单击按钮”行。我明白为什么mouseClickable不被调用,按钮声明单击已处理。所以我预计我需要使用另一种鼠标方法而不是mouseClickable. 但我一生都无法弄清楚我应该使用什么。

@OptIn(ExperimentalComposeUiApi::class, androidx.compose.foundation.ExperimentalDesktopApi::class)
@Composable
fun example() {
    Card(
        modifier = Modifier
            .width(150.dp).height(64.dp)
            .mouseClickable { println("Clicked card") }
    ) {
        Column {
            Button({ println("Clicked button")}) { Text("Click me") }
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

kotlin android-jetpack-compose compose-desktop

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