我正在使用 Jetpack Compose TextField,我想在用户按下操作按钮(imeActionPerformed参数)时关闭虚拟键盘。
val text = +state { "" }
TextField(
value = text.value,
keyboardType = KeyboardType.Text,
imeAction = ImeAction.Done,
onImeActionPerformed = {
// TODO Close the virtual keyboard here <<<
}
onValueChange = { s -> text.value = s }
)
Run Code Online (Sandbox Code Playgroud) android android-input-method kotlin android-jetpack-compose android-compose-textfield
正如在 XML 中我们过去向 a 添加一个可绘制对象一样,那么Jetpack Compose 中的,TextView 相当于什么?除了使用之外,还有什么简单的方法可以实现这一目标吗?android:drawableLeftandroid:drawableRightTextRow { Image() Text() }
我正在使用CameraX代码实验室,即使使用setTargetAspectRatio和setTargetResolution方法,预览中的纵横比也错误。
private fun startCamera() {
// Create configuration object for the viewfinder use case
val previewConfig = PreviewConfig.Builder().apply {
setTargetAspectRatio(Rational(1, 1))
setTargetResolution(Size(640, 640))
}.build()
...
Run Code Online (Sandbox Code Playgroud)
布局使用的是硬编码的大小,如代码实验室中所示。
<TextureView
android:id="@+id/view_finder"
android:layout_width="640px"
android:layout_height="640px"
...
Run Code Online (Sandbox Code Playgroud)
如果库具有CameraTextureView和属性android:scaleType(类似于的现有属性ImageView),可以将预览调整为预览大小,那就太好了。
ScrollView fillViewPortJetpack Compose 中是否有类似的东西Column?
看这个例子:
@Composable
fun FillViewPortIssue() {
Column(
Modifier
.fillMaxSize()
.padding(16.dp)
) {
for (i in 0..5) {
Box(
modifier = Modifier
.padding(vertical = 8.dp)
.background(Color.Red)
.fillMaxWidth()
.height(72.dp)
)
}
Spacer(modifier = Modifier.weight(1f))
Button(
modifier = Modifier.fillMaxWidth(),
onClick = { /*TODO*/ }
) {
Text("Ok")
}
}
}
Run Code Online (Sandbox Code Playgroud)
这是结果:
当设备处于横向时,内容被裁剪,因为没有滚动。如果我添加verticalScroll修饰符,请执行Column...
...
Column(
Modifier
.verticalScroll(rememberScrollState()) // <<-- this
.fillMaxSize()
.padding(16.dp)
) {
...
Run Code Online (Sandbox Code Playgroud)
...滚动问题已修复,但按钮上升,就像这样。
在传统的工具包中,我们可以使用ScrollView+fillViewPort属性来解决这个问题。有什么等同于 Compose 的东西吗?
我正在寻找 jetpack compose 中的阿拉伯符号支持。我想更改一些阿拉伯标点符号的颜色并自定义它们的外观。目前,我正在使用此功能来实现此目的:
\nprivate fun colorPonctuation(input: String): AnnotatedString {\n return buildAnnotatedString {\n input.forEach {\n if (it == \'\\u064B\' || it == \'\\u064D\'\n || it == \'\\u064D\' || it == \'\\u064E\' || it == \'\\u064F\' ||\n it == \'\\u0650\' || it == \'\\u0651\' || it == \'\\u0652\' || it == \'\\u0653\' ||\n it == \'\\u0654\' || it == \'\\u0655\' || it == \'\\u0656\' || it == \'\\u0657\' ||\n it == \'\\u0658\' || it == \'\\u0659\' || it == \'\\u065A\' …Run Code Online (Sandbox Code Playgroud) 我在 Jetpack Compose 中使用 TextField 组件。获得焦点时如何选择所有文本?
我正在使用Coil for Compose加载图像,如下所示。
@Composable
fun SvgImageSample() {
val painter = rememberAsyncImagePainter(
model = ImageRequest.Builder(LocalContext.current)
.decoderFactory(SvgDecoder.Factory())
.data("https://someserver.com/SVG_image.svg")
.size(Size.ORIGINAL)
.build()
)
Image(
painter = painter,
modifier = Modifier.size(100.dp).testTag("myImg"),
contentDescription = null
)
}
Run Code Online (Sandbox Code Playgroud)
图像已正确加载。现在,我想编写一个测试来检查图像是否已加载。有没有现成的断言 ?
像这样的东西:
class MyTest {
@get:Rule
val composeTestRule = createComposeRule()
@Test
fun checkIfTheImageLoads() {
composeTestRule.setContent {
MyAppThemeTheme {
SvgImageSample()
}
}
composeTestRule.onNodeWithTag("myImg")
.assertCoilImageIsLoaded() // <- this is what I want
}
}
Run Code Online (Sandbox Code Playgroud) android android-jetpack-compose coil android-jetpack-compose-testing
android ×5
kotlin ×2
android-jetpack-compose-testing ×1
android-jetpack-compose-text ×1
coil ×1
textfield ×1