我正在尝试实现一个底部带有按钮的列表,如下所示:
由于我不知道列表中会有多少项目,因此我使用LazyColumn. 仅当列表没有填满整个屏幕时,才应将底部的按钮放置在那里,如果填满整个屏幕,则该按钮应向下移动并成为列表中的最后一项。
像这样移动按钮LazyColumn:
LazyColumn(...) {
items(items) { item -> ...}
item { Button() }
}
Run Code Online (Sandbox Code Playgroud)
给出以下内容:
我尝试在两者之间添加一个SpacerwithfillMaxHeight()修饰符作为项目,但它没有改变。
我还尝试在列中添加LazyColumn和:Button
Column {
LazyColumn(
modifier = Modifier.weight(1f)
) {
items(items) { item -> ...}
}
Button()
}
Run Code Online (Sandbox Code Playgroud)
但这仅将按钮固定在底部,就好像它Column是一个LinearLayout.
考虑到这一点,是否可以对齐其中一个LazyColumn项目,使其始终位于底部?或者,添加某种空间来填充可用区域?
android android-jetpack-compose android-jetpack-compose-list
我所在的项目正在慢慢采用 Jetpack Compose。它主要是一个单一的Activity多Fragment应用程序,我们使用 Android 的导航组件来处理到每个屏幕的转换 ( Fragment)。只要有可能,我们就只用Fragment可组合项替换 s' XML 布局。
截至目前,案件处理情况如下:
A.sFragment显示可组合项并处理导航:
class ScreenFragment : Fragment() {
// For observing events that trigger navigation
private val viewModel by lazyViewModel { ScreenViewModel() }
override fun onCreateView( ... ): View {
return ComposeView(requireContext()).apply {
setViewCompositionStrategy(DisposeOnLifecycleDestroyed(viewLifecycleOwner))
setContent {
AppTheme {
Screen(onBackPressed = { findNavController().navigateUp() })
}
}
}
}
...
}
Run Code Online (Sandbox Code Playgroud)
B. 处理其他与 UI 相关的所有内容的可组合项:
@Composable
fun CreatePassword(
onBackPressed: () -> Unit,
) { …Run Code Online (Sandbox Code Playgroud) 在当前将我的应用程序转换为 Jetpack compose 时,我在某些情况下遇到了一些问题来调整我当前的调色板。
TextInputLayout我的 xml 文件中有一些从主题上的 SECUNDARY 颜色继承了高亮文本颜色。
<style name="Theme.MyApp" parent="Theme.MaterialComponents.Light.NoActionBar">
...
<item name="colorPrimary">@color/blue</item>
<item name="colorPrimaryVariant">@color/blue</item>
<item name="colorSecondary">@color/red</item>
<item name="colorSecondaryVariant">@color/red</item>
...
</style>
Run Code Online (Sandbox Code Playgroud)

问题是我的TextFieldon compose 继承了 PRIMARY 颜色的高亮文本颜色MaterialTheme。
MaterialTheme(
colors = Colors(
primary = Color.Blue,
...
secondary = Color.Red,
...
),
content = content,
typography = MaterialTheme.typography,
shapes = MaterialTheme.shapes,
) {
TextField(...)
}
Run Code Online (Sandbox Code Playgroud)

我覆盖了colors参数,TextField但似乎没有影响这种颜色。
是否有一种方法可以在不更改colorson 的情况下覆盖 compose 上的突出显示颜色MaterialTheme?我想避免这种情况,因为它可能会在使用相同主题的其他屏幕上引起问题。
android android-textinputlayout android-jetpack-compose android-jetpack-compose-text
我来自 Kotlin 背景,我习惯了 enums 实现这一事实Comparable,这允许我执行如下操作:
给定一个枚举
enum class Fruit{
APPLE,
BANANA,
ORANGE,
}
Run Code Online (Sandbox Code Playgroud)
我可以使用运算符<、或来比较此枚举的任何出现,例如>:<=>=
APPLE < BANANA -> true
ORANGE < BANANA -> false
Run Code Online (Sandbox Code Playgroud)
我想知道 dart 默认情况下是否具有相同的功能,或者我是否必须为我可能需要的任何枚举定义自定义运算符。