我正在做实验来理解重组和智能重组并制作了一个样本
\n\n抱歉,颜色是用 Random.nextIn() 生成的,以便在视觉上观察重组,设置颜色对重组没有影响,也尝试不更改颜色。
\ngif的内容由三部分组成
\n样品1
\n@Composable\nprivate fun Sample1() {\n\n Column(\n modifier = Modifier\n .background(getRandomColor())\n .fillMaxWidth()\n .padding(4.dp)\n ) {\n var counter by remember { mutableStateOf(0) }\n\n\n Text("Sample1", color = getRandomColor())\n\n Button(\n modifier = Modifier\n .fillMaxWidth()\n .padding(vertical = 4.dp),\n colors = ButtonDefaults.buttonColors(backgroundColor = getRandomColor()),\n onClick = {\n counter++\n }) {\n Text("Counter: $counter", color = getRandomColor())\n }\n }\n}\n
Run Code Online (Sandbox Code Playgroud)\n我在这里没有问题,因为智能组合按预期工作,Text
最重要的是不读取更改,counter
因此重组仅发生在Text
inside Button
。
样品2
\n@Composable\nprivate fun Sample2() {\n Column(\n modifier …
Run Code Online (Sandbox Code Playgroud) android kotlin android-jetpack-compose compose-recomposition
在官方文档中可以看到有一个名为 SubcomposeLayout 的布局定义为
布局的模拟,允许在测量阶段对实际内容进行细分,例如使用测量期间计算的值作为子项组成的参数。
可能的用例:
您需要知道在组合过程中父级传递的约束,并且无法仅使用自定义 Layout 或 LayoutModifier 来解决您的用例。请参阅 androidx.compose.foundation.layout.BoxWithConstraints。
您希望在构建第二个子项时使用第一个子项的大小。
您想根据可用尺寸懒惰地组合您的项目。例如,您有一个包含 100 个项目的列表,您不必组合所有项目,而是只组合当前可见的项目(例如其中 5 个),并在组件滚动时组合下一个项目。
我用SubcomposeLayout
关键字搜索了 Stackoverflow,但找不到任何相关内容,创建了这个示例代码,从官方文档中复制了大部分代码,以测试和了解它是如何工作的
@Composable
private fun SampleContent() {
Column(
modifier = Modifier
.fillMaxSize()
.verticalScroll(rememberScrollState())
) {
SubComponent(
mainContent = {
Text(
"MainContent",
modifier = Modifier
.background(Color(0xffF44336))
.height(60.dp),
color = Color.White
)
},
dependentContent = {
val size = it
println(" Dependent size: $size")
Column() {
Text(
"Dependent Content",
modifier = Modifier
.background(Color(0xff9C27B0)),
color = Color.White
)
}
}
)
}
} …
Run Code Online (Sandbox Code Playgroud) ImageBitmap 加载和图像
ImageBitmap.imageResource(
LocalContext.current.resources,
R.drawable.landscape1
)
Run Code Online (Sandbox Code Playgroud)
还有一个可以使用一些参数调用的函数
ImageBitmap(
width = 300,
height = 300,
config = ImageBitmapConfig.Argb8888,
hasAlpha = true,
colorSpace = ColorSpaces.Srgb
)
Run Code Online (Sandbox Code Playgroud)
它返回没有像素数据的空位图,是否可以使用某些特定配置创建 imageBitMap ?
有类似 ImageBitmap 的东西吗?
val option = BitmapFactory.Options()
option.inPreferredConfig = Bitmap.Config.ARGB_8888
val bitmap: Bitmap = BitmapFactory.decodeResource(
LocalContext.current.resources,
R.drawable.landscape1,
option
)
Run Code Online (Sandbox Code Playgroud) 这是问答式的问题,因为我正在寻找使用 Jetpack Canvas 的绘图示例,但在 stackoverflow 上有问题,这个或另一个,我发现可以使用pointerInteropFilter
像 View 那样的绘图onTouchEvent
MotionEvent
,根据文档,这是不建议的
一个特殊的 PointerInputModifier,提供对最初调度到 Compose 的底层 MotionEvent 的访问。优先选择pointerInput ,并且仅将其用于与使用MotionEvents 的现有代码的互操作。
虽然此修饰符的主要目的是允许任意代码访问分派给 Compose 的原始 MotionEvent,但为了完整性,提供了类似物以允许任意代码与系统交互,就好像它是 Android 视图一样。
android android-jetpack-compose android-jetpack-compose-canvas
我们需要能够在长按 Jetpack Compose 中的同一组件后检测到点击和拖动手势。
要检测点击,我们可以这样做:
Modifier.pointerInput(graphData) {
detectTapGestures(
...
)
}
Run Code Online (Sandbox Code Playgroud)
并检测长按后的拖动手势:
Modifier.pointerInput(graphData) {
detectDragGesturesAfterLongPress(
...
)
}
Run Code Online (Sandbox Code Playgroud)
但不可能同时使用两者,因为第一个detect*
将消耗指针事件:
Modifier.pointerInput(graphData) {
detectTapGestures(
...
)
detectDragGesturesAfterLongPress(
...
)
}
Run Code Online (Sandbox Code Playgroud)
是否有可能以更方便的方式实现这一点,然后滚动我们自己的自定义函数来复制 detectorDragGesturesAfterLongPress 中的大部分代码?
android kotlin android-jetpack-compose android-jetpack-compose-gesture
我正在使用Google翻译将strings.xml文件翻译成其他语言的英语.但是逐个翻译1000多行需要花费太多时间.有没有简单的方法或代码来做到这一点?
如何将您的应用翻译成其他语言?
如何将超链接添加到 Text 组件文本的某些部分?
随着buildAnnotatedString
我可以设置链接部分蓝色并带有下划线,如下面的图像,但我怎么也可以把这一节变成链接?
val annotatedLinkString = buildAnnotatedString {
val str = "Click this link to go to web site"
val startIndex = str.indexOf("link")
val endIndex = startIndex + 4
append(str)
addStyle(
style = SpanStyle(
color = Color(0xff64B5F6),
textDecoration = TextDecoration.Underline
), start = startIndex, end = endIndex
)
}
Text(
modifier = modifier
.padding(16.dp)
.fillMaxWidth(),
text = annotatedLinkString
)
Run Code Online (Sandbox Code Playgroud)
我也可以,Spanned
但有什么方法可以使用它Text
吗?
val str: Spanned = HtmlCompat.fromHtml(
"<a href=\"http://www.github.com\">Github</a>", HtmlCompat.FROM_HTML_MODE_LEGACY
)
Run Code Online (Sandbox Code Playgroud) android android-jetpack-compose android-jetpack-compose-text
我有一个使用 onMeasure、onLayout 和 OnDraw 用 View 编写的 BadgeView
我正在尝试将此视图迁移到 Jetpack Compose。
由于使用 compose 绘制形状更容易,我认为根本不需要使用画布或Layout
函数,但是在计算文本大小之前,文本或表面环绕的大小没有正确设置,并且圆形没有正确绘制。
还检查了徽章组件,它使用静态尺寸BadgeWithContentRadius
,因为在我的设计中尺寸取决于文本尺寸,所以不可能设置静态尺寸。
Surface(
shape = CircleShape,
contentColor = Color.White,
color = Color.Red
) {
Text(
text = "0",
modifier = Modifier.padding(4.dp),
fontSize = 34.sp,
)
}
Run Code Online (Sandbox Code Playgroud)
然后尝试使用
var size: Dp by remember { mutableStateOf(40.dp) }
val density = LocalDensity.current
Surface(
shape = CircleShape,
modifier = Modifier.size(size),
contentColor = Color.Yellow,
color = Color.Red
){
Text(
text = "0",
modifier = Modifier.padding(4.dp),
fontSize …
Run Code Online (Sandbox Code Playgroud) 使用本手册来测试协程。编写预期抛出异常的测试会导致崩溃,而不是通过测试。我想知道我做错了什么。
private val testDispatcher = TestCoroutineDispatcher()
@Before
fun setup() {
// provide the scope explicitly, in this example using a constructor parameter
Dispatchers.setMain(testDispatcher)
}
@After
fun cleanUp() {
Dispatchers.resetMain()
testDispatcher.cleanupTestCoroutines()
}
@Test(expected = RuntimeException::class)
fun testSomeFunctionWithException() = testDispatcher.runBlockingTest {
someFunctionWithException()
}
private fun someFunctionWithException() {
MainScope().launch {
throw RuntimeException("Failed via TEST exception")
}
}
Run Code Online (Sandbox Code Playgroud)
测试方法见上、下
private val testScope = TestCoroutineScope()
private lateinit var subject: Subject
@Before
fun setup() {
// provide the scope explicitly, in this example using …
Run Code Online (Sandbox Code Playgroud) 在材料设计中TextField 页面 TextField
具有以下属性
辅助元素提供有关在文本字段中输入的文本的更多详细信息。
帮助文本 帮助文本传达有关输入字段的附加指导,例如如何使用它。它应该只占据一行,持续可见或仅在焦点上可见。
错误消息 当不接受文本输入时,错误消息会显示有关如何修复它的说明。错误消息显示在输入行下方,替换帮助文本直到修复。
图标 图标也可用于发送警报消息。将它们与错误消息配对以提供冗余警报,这在您需要为色盲用户进行设计时非常有用。
字符计数器 如果存在字符或字数限制,则应使用字符或字数计数器。它们显示所用字符的比率和总字符限制。
Jetpack Compose TextField
截至目前,这些属性是否存在compose 1.0.0-alpha09
?