如今,我正在尝试实现一种非常常见的行为,即在另一个可滚动的小部件中放置一个水平列表。考虑一下像imdb应用程序的主屏幕这样的内容:
所以我想有一个垂直滚动的小部件,上面没有几个项目。在它的顶部应该有一个水平线ListView,后面跟着一些叫做的项目motivationCard。列表和卡片之间也有一些标题。
我在我的身上有这样的东西Widget:
@override
Widget build(BuildContext context) => BlocBuilder<HomeEvent, HomeState>(
bloc: _homeBloc,
builder: (BuildContext context, HomeState state) => Scaffold(
appBar: AppBar(),
body: Column(
children: <Widget>[
Text(
Strings.dailyTasks,
),
ListView.builder(
scrollDirection: Axis.horizontal,
itemCount: tasks.length,
itemBuilder: (BuildContext context, int index) =>
taskCard(
taskNumber: index + 1,
taskTotal: tasks.length,
task: tasks[index],
),
),
Text(
Strings.motivations,
),
motivationCard(
motivation: Motivation(
title: 'Motivation 1',
description:
'this is a description of the motivation'),
),
motivationCard(
motivation: Motivation(
title: 'Motivation 2', …Run Code Online (Sandbox Code Playgroud) android listview horizontal-scrolling flutter flutter-layout
我将数据绑定与 TextInputLayout/TextInputEditText 组合一起使用,如 xml 中所示。
<com.google.android.material.textfield.TextInputLayout
android:id="@+id/lastname_input_layout"
style="@style/TextInputLayout"
android:layout_width="0dp"
android:layout_height="wrap_content"
app:endIconMode="clear_text"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/firstname_input_layout"
app:visible="@{viewModel.showFields}">
<com.google.android.material.textfield.TextInputEditText
android:id="@+id/lastname_input"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:hint="@string/lastname"
android:inputType="textCapWords"
android:text="@={viewModel.lastName}"
android:textAppearance="@style/TextAppearance.Input" />
</com.google.android.material.textfield.TextInputLayout>
<com.google.android.material.textfield.TextInputLayout
android:id="@+id/email_input_layout"
style="@style/TextInputLayout"
android:layout_width="0dp"
android:layout_height="wrap_content"
app:endIconMode="clear_text"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/lastname_input_layout"
app:visible="@{viewModel.showFields}">
<com.google.android.material.textfield.TextInputEditText
android:id="@+id/email_input"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:hint="@{viewModel.watchMediaTextHint}"
android:inputType="@{viewModel.watchMediaInputType}"
android:text="@={viewModel.mediaText}"
android:textAppearance="@style/TextAppearance.Input" />
</com.google.android.material.textfield.TextInputLayout>
Run Code Online (Sandbox Code Playgroud)

正如您所看到的,这两个字段在理论上是相同的,唯一的区别是其中一个字段具有hint通过字符串资源给出的文本,另一个字段具有数据绑定。两者具有相同的样式、文本外观等,但是使用TextInputEditText数据绑定的提示具有不同的颜色。此外,当视图获得焦点时,标签不会像第一个字段那样动画化。
使用字符串资源设置提示可以使此行为恢复正常,对于为什么会发生这种异常有什么想法吗?我更愿意使用数据绑定而不是编程解决方案来解决这个问题。
谢谢。
我RecyclerView使用GridLayoutManager具有动态列号的a呈现不同类型的项目。问题是,我有一个RecyclerView.ItemDecoration只适用于让我们说Type A项目。这RecyclerView.ItemDecoration会在左侧列中的那些项目的左侧/开始处添加边距,并在右侧列中的那些项目的右侧/结尾处添加边距。它基本上是为了使项目看起来更居中并因此拉伸(这用于平板电脑/横向模式)。该RecyclerView网格看起来是这样的:
| A | | A |
| A | | A |
| B |
| A | | A |
| A | | A |
| B |
| A | | A |
Run Code Online (Sandbox Code Playgroud)
该ItemDecoration如下所示:
class TabletGridSpaceItemDecoration(private val space: Int) : RecyclerView.ItemDecoration() {
override fun getItemOffsets(outRect: Rect, view: View, parent: RecyclerView, state: RecyclerView.State) = with(outRect) {
val isTypeAItemLayout = view.findViewById<ConstraintLayout>(R.id.type_a_item_container) != null …Run Code Online (Sandbox Code Playgroud) android gridlayoutmanager android-recyclerview recyclerview-layout item-decoration