我想TextField在 Jetpack Compose 中自定义可组合项。我试图实现下图中的结果,但不知何故TextField有一些默认填充,我找不到如何更改其值。我想删除默认填充并自定义它
(右边的图像是我实现的结果。我画了一个边框,这样你就可以看到它有填充,顺便说一句,下面的TextField只是Text可组合项,它们不是TextFields)
下面是我的TextField代码
TextField(
value = "",
onValueChange = {},
modifier = Modifier
.weight(1F)
.padding(0.dp)
.border(width = 1.dp, color = Color.Red),
placeholder = {
Text(
"5555 5555 5555 5555", style = TextStyle(
color = Color.Gray
)
)
},
colors = TextFieldDefaults.textFieldColors(
backgroundColor = Color.Transparent,
unfocusedIndicatorColor = Color.Transparent,
focusedIndicatorColor = Color.Transparent
),
)
Run Code Online (Sandbox Code Playgroud) 我想在布局底部添加边框。我知道我可以使用Divider可组合项,但我只想学习如何绘制边框。
目前,我可以为所有边添加边框,但这不是我想要的。
Row(
modifier = Modifier
.border(border = BorderStroke(width = 1.dp, Color.LightGray))
) {
TextField(value = "", onValueChange = {}, modifier = Modifier.weight(1f))
Switch(checked = true, onCheckedChange = {})
Icon(Icons.Filled.Close, "Remove", tint = Color.Gray)
}
Run Code Online (Sandbox Code Playgroud) 我目前正在尝试实现一个 gridview,它由 2 列组成。我知道我可以使用列和行来实现我自己的网格视图,但我只想使用现有的方法,尽管它是实验性的。
@Composable
fun MyGridScreen() {
LazyVerticalGrid(cells = GridCells.Fixed(2), modifier = Modifier.fillMaxSize(),contentPadding = PaddingValues(12.dp)) {
items(15) {
Box(
contentAlignment = Alignment.Center,
modifier = Modifier
.padding(10.dp)
.height(80.dp)
.background(Color.Red)
.aspectRatio(1f)
) {
Text("Grid item $it", color = Color.White)
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
下面是我取得的结果。我无法在该项目下方添加空格:(
在我的应用程序中,我使用Jetpack Navigation和BottomNavigationView. 我有 4 个片段:主页、搜索、通知、个人资料,当我在主页片段中时,我再次单击底部导航视图中的主页项目,它会重新创建片段。我进行了搜索,但主要的答案是针对那些不使用喷气背包导航的人。
(顺便说一句,我只希望当我已经在该片段中时不重新创建片段,如果我不在该片段中,则可以重新创建)
以下是我的设置:
val navHostFragment = supportFragmentManager.findFragmentById(R.id.fragmentContainerView_mainActivity) as NavHostFragment
navController = navHostFragment.navController
binding.bottomNavView.setupWithNavController(navController)
Run Code Online (Sandbox Code Playgroud)
android android-fragments fragmentmanager android-bottomnav android-jetpack-navigation
我看到了这个文档https://developer.android.com/studio/debug/network-profiler
这表示我们可以通过网络检查器检查网络请求和响应。但是,我的 Android Studio 没有显示此选项卡。(我尝试过invalidate caches/restart,但没有成功)
当前的android studio版本是:Arctic Fox,2020.3.1 patch 4
我正在尝试构建一个外部带有阴影的文本字段
这就是我取得的成果。
但是如果放大图片,您会在白色文本字段下看到一些矩形背景(请查看文本字段外面的角,有一个背景)
我怎样才能删除那个背景?
@Composable
fun MyTextField() {
var text by remember {
mutableStateOf("")
}
Box(
modifier = Modifier
.padding(15.dp)
.shadow(5.dp)
.background(color = Color.White, shape = RoundedCornerShape(10.dp))
.fillMaxWidth()
.height(50.dp),
contentAlignment = Alignment.Center,
) {
TextField(
value = text,
onValueChange = { text = it },
label = { Text(text = "Phone number", color = Color.Gray, fontSize = 14.sp) },
modifier = Modifier
.fillMaxSize()
.background(color = Color.Transparent, shape = RoundedCornerShape(10.dp)),
colors = TextFieldDefaults.textFieldColors(
backgroundColor = Color.Transparent,
focusedIndicatorColor = Color.Transparent,
unfocusedIndicatorColor = …Run Code Online (Sandbox Code Playgroud) 最近我一直在学习 LiveData 上的转换方法
我知道我们可以使用maporswitchMap方法来转换实时数据。假设我们有类似下面的 Player 数据类
data class Player(val name: String, val score: Int = 0)
Run Code Online (Sandbox Code Playgroud)
我们使用map方法将player livedata转换为playerName livedata
val player: LiveData<Player> = ...
val playerName: LiveData<String> =
Transformations.map(player) { it.name }
Run Code Online (Sandbox Code Playgroud)
我的问题是,在观察者函数中执行它有什么区别,因为它们都在主线程中运行?我的意思是,如果我们想获取playerName,那么我们也可以在观察者函数中获取它。为什么我们声明第二个 LiveData 实例来获取它
我从本指南中获取了示例代码:https://proandroiddev.com/livedata-transformations-4f120ac046fc
kotlin android-livedata mutablelivedata mediatorlivedata android-livedata-transformations
最近我一直在详细学习协程,据我所知,SupervisorJob()如果协程的子级之一由于某种原因被取消,我们有机会不取消所有子级。
据说以 开头的协程coroutineScope如果失败了,会取消所有子协程,但以 开头的协程supervisorScope只会取消失败的子协程
我想知道是否可以CoroutineScope通过添加SupervisorJobCoroutineContext 来改变行为,但我无法获得预期的行为,这是我没有得到的
预期行为 - getData1() 和 getData3() 结果被打印*
实际: - getData2() 取消所有协程
fun main() = runBlocking {
val exceptionHandler = CoroutineExceptionHandler { coroutineContext, throwable ->
println(throwable)
}
val customScope = CoroutineScope(SupervisorJob() + exceptionHandler)
customScope.launch {
launch {
getData1().also { println(it) }
}
launch {
getData2().also { println(it) }
}
launch {
getData3().also { println(it) }
}
}.join()
}
private suspend fun getData1(): String? {
delay(1000) …Run Code Online (Sandbox Code Playgroud)