您可以忽略backgroundgrid,因为我将不使用它。
时间表中的每个事件都有开始时间和结束时间。视图中项目的高度与事件的持续时间有关。该列表是与LiveData一起观察的,因此更改时间表需要更新屏幕。
我考虑了以下方法:
a)使用recyclerView。不幸的是,这要么从左到右布置项目并垂直滚动,要么将它们垂直布置但水平滚动。我基本上需要垂直布局,必要时可通过垂直滚动跳到下一列。
b)使用网格布局(不是gridview),并将项目跨行。缺点是所有项目都必须是单行的倍数。假设所有事件的持续时间都是最短时间的倍数。我可以使用1或5分钟作为最短持续时间,但这会导致很多行。此外,我不确定是否要更新屏幕,滚动以及是否节省内存。
c)使用具有五个垂直lineairlayout的父级滚动布局。以编程方式将项目添加到具有正确高度的相应lineairlayout中。即使视图在屏幕上不可见,这也会将所有视图项添加到布局中。我可能会忘记LiveData更新。
我还有其他选择吗?还是可以使用recyclerView?我该怎么办?
P.S。我仍在使用Java,但开始学习Kotlin
答案 0 :(得分:2)
您可以使用Android Week View
功能
在dependencies
下添加
implementation 'com.github.alamkanak:android-week-view:1.2.6'
WeekView在您的xml布局中。
<com.alamkanak.weekview.WeekView
android:id="@+id/weekView"
android:layout_width="match_parent"
android:layout_height="match_parent"
app:eventTextColor="@android:color/white"
app:textSize="12sp"
app:hourHeight="60dp"
app:headerColumnPadding="8dp"
app:headerColumnTextColor="#8f000000"
app:headerRowPadding="12dp"
app:columnGap="8dp"
app:noOfVisibleDays="3"
app:headerRowBackgroundColor="#ffefefef"
app:dayBackgroundColor="#05000000"
app:todayBackgroundColor="#1848adff"
app:headerColumnBackground="#ffffffff"/>
答案 1 :(得分:0)
您可以使用tableLayout。
示例-
<TableLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:shrinkColumns="*" android:stretchColumns="*"
android:background="#ffffff">
<TableRow
android:id="@+id/tableRow1"
android:layout_height="wrap_content"
android:layout_width="match_parent">
<TextView
android:id="@+id/TextView04"
android:text="Row 2 column 1"
android:layout_weight="1" android:background="#dcdcdc"
android:textColor="#000000"
android:padding="20dip"
android:gravity="center"/>
<TextView
android:id="@+id/TextView04"
android:text="Row 2 column 2"
android:layout_weight="1" android:background="#d3d3d3"
android:textColor="#000000"
android:padding="20dip"
android:gravity="center"/>
<TextView
android:id="@+id/TextView04"
android:text="Row 2 column 3"
android:layout_weight="1" android:background="#cac9c9"
android:textColor="#000000"
android:padding="20dip"
android:gravity="center"/>
</TableRow>
有关教程,请参考-
https://androidexample.com/Table_Layout_-_Android_Example/index.php?view=article_discription&aid=74
答案 2 :(得分:0)
也许可以使用 FlexboxLayout 来实现。
答案 3 :(得分:0)
我没有找到合适的库或布局,所以我最终写了自己的视图,在onDraw中计算每个约会的位置。它并不像听起来那么难。