标签: android-compose-textfield

在 Text Jetpack compose 上实现长按

我有LazyColumn一个Text(). 我已经设置了 clickable forText()但它相当于OnClickListner. 现在我想设置一个等价的setOnLongClickListener. 我怎样才能做到这一点?

@Composable
fun MyText(name: String, modifier: Modifier = Modifier) {

  var isSelected by remember {
        mutableStateOf(false)
    }
        Text(
            text = "Hello $name!",
            modifier = modifier
                .clickable { isSelected = !isSelected }
                .padding(16.dp)
        )
Run Code Online (Sandbox Code Playgroud)

android android-jetpack-compose android-compose-textfield

8
推荐指数
1
解决办法
4936
查看次数

在Jetpack Compose中使用lazyColum列里面有错误

我有一个lazyColumn,我想在列中使用它,但出现以下错误并且应用程序崩溃:

不允许在相同方向的布局中嵌套可滚动的布局,例如 LazyColumn 和 Column(Modifier.verticalScroll())。如果您想在项目列表之前添加标题,请查看 LazyColumn 组件,该组件具有 DSL api,允许首先通过 item() 函数添加标题,然后通过 items() 添加项目列表

lazyColumn 代码,我在此代码中有一个列表:


@Composable
fun UpScreenSection(
    modifier: Modifier,
    state: ProfileState,
    viewModel: ProfileViewModel
) {
    Spacer(modifier = Modifier.size(24.dp))

    Column(
        modifier = modifier
            .fillMaxSize()
            .padding(24.dp)
    ) {
        if (!state.items.isNullOrEmpty()) {
            Box(
                modifier = modifier
                    .fillMaxSize()
            ) {
                LazyColumn(modifier = modifier.fillMaxSize()) {
                    items(state.items) { item ->
                        ProfileListItems(item = item, onItemClick = {
                            //TODO Navigate to specific screen
                            when (it.id) {
                                1 -> {
                                }
                                2 -> {
                                }
                                3 -> { …
Run Code Online (Sandbox Code Playgroud)

android android-compose-textfield

8
推荐指数
1
解决办法
8916
查看次数

即使没有完成用户焦点交互,在初始化时也会调用 Compose TextField Modifier.onFocusChanged {} 事件

可使用代码重现:

var value by remember { mutableStateOf("Hello\nWorld\nInvisible") }

TextField(
    value = value,
    onValueChange = { value = it },
    label = { Text("Enter text") },
    modifier = Modifier
        .onFocusChanged { Log.d("TAG", "1 OnFocusChangedCalled: $it") }
)

TextField(
    value = value,
    onValueChange = { value = it },
    label = { Text("Enter text") },
    modifier = Modifier
        .onFocusChanged { Log.d("TAG", "2 OnFocusChangedCalled: $it") }
)
Run Code Online (Sandbox Code Playgroud)

只需打开视图,Logcat 就会显示:

D/TAG: 1 OnFocusChangedCalled: Inactive
D/TAG: 2 OnFocusChangedCalled: Inactive
Run Code Online (Sandbox Code Playgroud)

对于传统的 XML 布局,onFocusChangedListener 仅在用户实际与字段交互时触发。

使用撰写布局,仅当用户从文本字段中删除焦点时,我才尝试进行错误验证。

然而,这种行为导致我的验证在视图初始化后立即触发。 …

android android-jetpack-compose android-compose-textfield

8
推荐指数
1
解决办法
2246
查看次数

jetpack 组合的公开下拉菜单

我想知道是否有针对 jetpack compose 的 Exposed 下拉菜单的解决方案?我无法在 jetpack compose 中为这个组件找到合适的解决方案。有什么帮助吗?

落下

android kotlin android-jetpack-compose android-compose-textfield android-jetpack-compose-text

7
推荐指数
4
解决办法
2226
查看次数

如何使用 Jetpack Compose 在 TextField 中应用掩码日期 (mm/dd/yyyy)?

我有一个文本字段,其中不能超过 10 个字符,并且要求用户以“mm/dd/yyyy”格式输入日期。每当用户键入前 2 个字符时,我都会附加“/”,当用户键入接下来的 2 个字符时,我会再次附加“/”。

为了实现这一目标,我做了以下操作:

            var maxCharDate = 10

            TextField(
                value = query2,
                onValueChange = {
                    if (it.text.length <= maxCharDate) {
                        if (it.text.length == 2 || it.text.length == 5)
                            query2 = TextFieldValue(it.text + "/", selection = TextRange(it.text.length+1))
                        else
                            query2 = it
                    }
                    emailErrorVisible.value = false
                },
                label = {
                    Text(
                        "Date of Birth (mm/dd/yyyy)",
                        color = colorResource(id = R.color.bright_green),
                        fontFamily = FontFamily(Font(R.font.poppins_regular)),
                        fontSize = with(LocalDensity.current) { dimensionResource(id = R.dimen._12ssp).toSp() })
                },
                  .
                  .
                  .
Run Code Online (Sandbox Code Playgroud)

它正在工作,只是附加的“/”在按退格键时不会被删除,而其他字符会被删除。

如何使按退格键时“/”也被删除?

android textfield android-jetpack-compose android-compose-textfield

7
推荐指数
2
解决办法
4707
查看次数

Jetpack Compose Material 主题中出现意外的文本颜色 alpha

今天我发现 MaterialTheme 对文本颜色应用了 alpha 值。正如您从所附示例中看到的,当我更改背景颜色时,文本的颜色似乎有所不同,因为它具有透明度值。我可以强制设置颜色 ( Text(color = MaterialTheme.colors.onBackground, ....)) 并且这可以正常工作,但我不想对每个文本都执行此操作。

MaterialTheme 为什么要这样做?我该如何覆盖这种行为?

Compose 和 Material Compose Material 版本:1.2.1

@Preview
@Composable
private fun Preview_Playground() {
    MaterialTheme {
        Box(Modifier.background(Color.Green)) {
            Text("Test", fontWeight = FontWeight.ExtraBold, modifier = Modifier.alpha(1f))
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述 在此输入图像描述

android android-jetpack-compose android-compose-textfield android-jetpack-compose-material3

7
推荐指数
1
解决办法
926
查看次数

Jetpack Compose 中的可编辑动态 ExusedDropDownMenuBox

我试图让这个下拉菜单变得动态。当我在文本字段中输入内容时,我希望列表能够更新(根据用户输入的内容进行过滤),并且用户可以从过滤后的下拉列表中进行选择。

我在这里检查了开发文档中的示例代码 https://developer.android.com/reference/kotlin/androidx/compose/material3/package-summary#ExposeDropdownMenuBox(kotlin.Boolean,kotlin.Function1,androidx.compose .ui.修饰符,kotlin.Function1)

我发现材质 3 下拉菜单在展开状态下会阻止用户输入。如果用户开始输入并且我们说

onValueChange = { 
        selectedOptionText = it
        expanded = true
}
Run Code Online (Sandbox Code Playgroud)

用户被阻止进一步输入,因为展开的 ExposedDropdownMenu 会阻止用户输入

如何使文本字段动态打开下拉菜单,并根据用户输入更新列表?并且列表项是可选的

为了添加更多上下文,我知道如果我们说properties = PopupProperties(focusable = false),DropdownMenu不会阻止用户输入

DropdownMenu(
            expanded = expanded,
            onDismissRequest = { expanded = false },
            properties = PopupProperties(focusable = false)
        )
Run Code Online (Sandbox Code Playgroud)

但 UI 行为并不相同。我正在寻找 DropdownMenuBox 行为 DropdownMenu 属性 = PopupProperties(focusable = false)

android-jetpack-compose android-compose-textfield android-jetpack-compose-material3 android-compose-exposeddropdown

7
推荐指数
1
解决办法
2393
查看次数

错误:(JetPack Compose) 类型“TypeVariable(T)”没有方法“getValue(Nothing?, KProperty&lt;*&gt;)”

我发现一篇文章描述了如何在LazyColumn中实现视差视图,有这样一个方法:

@Composable
    fun ImageParallaxScroll() {
        val lazyListState = rememberLazyListState()
        val list = (0..1_000).map{ "Item $it" }.toList()

        val firstItemTranslationY: LazyListState by remember {
            derivedStateOf {
                when {
                    lazyListState.layoutInfo.visibleItemsInfo.isNotEmpty() && lazyListState.firstVisibleItemIndex == 0 -> lazyListState.firstVisibleItemScrollOffset * .6f
                    else -> 0f
                }
            }
        }

            ...
    }
Run Code Online (Sandbox Code Playgroud)

问题是整个remember下划线块都带有红线,并且出现这样的错误:

Type 'TypeVariable(T)' has no method 'getValue(Nothing?, KProperty<*>)' and thus it cannot serve as a delegate
Run Code Online (Sandbox Code Playgroud)

不明白这里有什么问题?

android android-jetpack android-jetpack-compose android-compose-textfield

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

Android Jetpack Compose - 每次文本字段值更改时都会重新组合可组合函数

我用来TextField获取用户输入并使用 stateflow 来处理视图模型中的文本状态/值。

问题是每次TextField的值发生变化时,HomeContent()函数都会被重新组合。
布局检查器输出图像 我的问题是,仅仅HomeContent()因为值发生变化就可以重构整个函数TextField,还是有办法避免函数重构?

视图模型

class MyViewModel() : ViewModel() {
    private val _nameFlow = MutableStateFlow("")
    val nameFlow = _nameFlow.asStateFlow()

    fun updateName(name: String) {
        _nameFlow.value = name
    }
}
Run Code Online (Sandbox Code Playgroud)

主要活动

class MainActivity : ComponentActivity() {
    private val myViewModel by viewModels<MyViewModel>()
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContent {
            AppArchitectureTheme {
                HelloScreen(myViewModel)
            }
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

主屏幕

@Composable
fun HelloScreen(viewModel: MyViewModel) {
    val name = viewModel.nameFlow.collectAsState()
    HelloContent(
        provideName = { …
Run Code Online (Sandbox Code Playgroud)

android android-jetpack-compose android-compose-textfield

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

Jetpack Compose 文本连字符

如何使用 Jetpack Compose 在 Android 中正确换行?我从网络上了解了该功能,我在网络上用于&shy;此类情况。

我定义了带有可能换行符的字符串值,如下所示:Korrespondenz\u00ADsprache。不幸的是,这不适用于 Android。

我使用下面的代码

Text(
    text = "Korrespondenz\u00ADsprache",
    style = MaterialTheme.typography.h4
)
Run Code Online (Sandbox Code Playgroud)

目前结果如下所示:

在此输入图像描述

预期结果应如下所示:

在此输入图像描述

android hyphenation android-jetpack-compose android-compose-textfield

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