如何在Jetpack中使用EditText或TextInput小部件撰写?

时间:2019-06-27 11:01:31

标签: android androidx android-jetpack-compose

我通过尝试一些诸如Image和EditText的小部件来探索Jetpack的组成。

对于文本输入,它带有EditableText。我已经尝试过下面的代码,但是在UI中没有显示任何内容

class MainActivity : AppCompatActivity() {

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContent {
            loadUi()
        }
    }

    @Composable
    fun loadUi() {
        CraneWrapper {
            MaterialTheme {
                val state = +state { EditorState("") }
                EditableText(
                    value = state.value,
                    onValueChange = { state.value = it },
                    editorStyle = EditorStyle(
                        textStyle = TextStyle(
                            fontSize = (50f)
                        )
                    )
                )
            }
        }
    }
}

我在这里想念的是什么?任何帮助将不胜感激!

5 个答案:

答案 0 :(得分:2)

对不起,我迟来了。 API进行了一些更改,因此您的代码现在应如下所示:

@Composable
fun loadUi() {
    val state = +state { EditorModel("smth") }
    TextField(
        value = state.value,
        onValueChange = { state.value = it },
        editorStyle = EditorStyle(
            textStyle = TextStyle(
                fontSize = (50.sp)
            )
        )
    )
}

您还可能会错过小部件,因为它没有默认背景,如果您有空字符串,则默认情况下几乎不可见

答案 1 :(得分:2)

通过1.0.0-alpha01,您可以使用类似的内容:

var text by remember { mutableStateOf(TextFieldValue("Text")) }

TextField(
        value = text,
        onValueChange = {
            text = it
        },
        label = { Text("Label") })

答案 2 :(得分:0)

dout <- Reduce(rbind,lapply(split(dates,cumsum(!is.na(dates$dates))), 
                            function(v) v <- within(v, dates <- seq(as.Date(dates[1]), 
                                                                    length = nrow(v),
                                                                    by="1 month"))))

答案 3 :(得分:0)

 val state = +state {
                    EditorModel("Edit Text")
                }
                TextField(
                    value = state.value,
                    onValueChange = {
                        state.value = it
                    },
                    textStyle = TextStyle(
                        fontSize = (30.sp),
                        color = Color.DarkGray
                    ),
                    keyboardType = KeyboardType.Text
                )

尝试这个。

答案 4 :(得分:0)

正如 Gabriele Mariotti 的回答中所述,这是正确的做法:

var text by rememberSaveable { mutableStateOf("Text") }

TextField(
    value = text,
    onValueChange = {
        text = it
    },
    label = { Text("Label") }
)

但是,如果您遇到以下错误:

<块引用>

类型 'TypeVariable(T)' 没有方法 'getValue(MainActivity, KProperty<*>)',因此它不能作为委托

只需将这两个导入添加到您的文件中即可:

import androidx.compose.runtime.getValue
import androidx.compose.runtime.setValue