小编Art*_*mes的帖子

有没有办法在 LazyColumn 底部对齐项目?

我正在尝试实现一个底部带有按钮的列表,如下所示:

在此输入图像描述

由于我不知道列表中会有多少项目,因此我使用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

10
推荐指数
1
解决办法
5442
查看次数

撰写创建新的 ViewModel 实例

我所在的项目正在慢慢采用 Jetpack Compose。它主要是一个单一的ActivityFragment应用程序,我们使用 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)

android android-viewmodel android-jetpack-compose

7
推荐指数
1
解决办法
3995
查看次数

如何在 Jetpack Compose 上更改 TextField 突出显示的文本颜色?

在当前将我的应用程序转换为 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)

带有主题辅助颜色的 TextInputLayout - xml

问题是我的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)

具有主题主色的 TextField - 撰写

我覆盖了colors参数,TextField但似乎没有影响这种颜色。

是否有一种方法可以在不更改colorson 的情况下覆盖 compose 上的突出显示颜色MaterialTheme?我想避免这种情况,因为它可能会在使用相同主题的其他屏幕上引起问题。

android android-textinputlayout android-jetpack-compose android-jetpack-compose-text

5
推荐指数
1
解决办法
108
查看次数

Dart 中的枚举有比较运算符吗?

我来自 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 默认情况下是否具有相同的功能,或者我是否必须为我可能需要的任何枚举定义自定义运算符。

dart

5
推荐指数
1
解决办法
5803
查看次数