设置时间表布局

时间:2018-07-10 12:23:54

标签: android timetable

我有一个时间表事件列表,并希望按照图中的布局。enter image description here

您可以忽略backgroundgrid,因为我将不使用它。

时间表中的每个事件都有开始时间和结束时间。视图中项目的高度与事件的持续时间有关。该列表是与LiveData一起观察的,因此更改时间表需要更新屏幕。

我考虑了以下方法:

a)使用recyclerView。不幸的是,这要么从左到右布置项目并垂直滚动,要么将它们垂直布置但水平滚动。我基本上需要垂直布局,必要时可通过垂直滚动跳到下一列。

b)使用网格布局(不是gridview),并将项目跨行。缺点是所有项目都必须是单行的倍数。假设所有事件的持续时间都是最短时间的倍数。我可以使用1或5分钟作为最短持续时间,但这会导致很多行。此外,我不确定是否要更新屏幕,滚动以及是否节省内存。

c)使用具有五个垂直lineairlayout的父级滚动布局。以编程方式将项目添加到具有正确高度的相应lineairlayout中。即使视图在屏幕上不可见,这也会将所有视图项添加到布局中。我可能会忘记LiveData更新。

我还有其他选择吗?还是可以使用recyclerView?我该怎么办?

P.S。我仍在使用Java,但开始学习Kotlin

4 个答案:

答案 0 :(得分:2)

您可以使用Android Week View

  • Android Week View是一个Android库,用于在应用程序中显示日历(周视图或日视图)。它支持自定义样式。
  

功能

  1. 周视图日历
  2. 日视图日历
  3. 自定义样式
  4. 水平和垂直滚动
  5. 无限水平滚动
  6. 在xml预览窗口中实时预览自定义样式

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 来实现。

Google flexbox-layout

答案 3 :(得分:0)

我没有找到合适的库或布局,所以我最终写了自己的视图,在onDraw中计算每个约会的位置。它并不像听起来那么难。