我正在构建一个带有定时事件的Android应用程序,我不确定应该用什么布局来构建我的时间轴。
事件可以有不同的高度,并且可以在用户点击它们时增长,但它们具有相同的宽度;
.
.
.
------------- |
| Event 4 > | --------------
------------- | < Event 7 |
| | |
| --------------
.
.
.
我有两种视图类型:
EventView
女巫持有事件信息并投下他的大纲TimeBarView
女巫是中间的酒吧(有一些财产,并且在很长的时间内延长)我如何放置我的物品,以便尊重我的时间线上的时间(例如1周可能是10px)
感谢任何帮助。 谢谢!
答案 0 :(得分:1)
我现在正在处理同样的问题。
我还没有完整的解决方案,但我有一个想法:
由于您必须支持时间轴,ListView
不合适,因为事件可能会重叠。
相反,请考虑使用2列GridView。我建议使用支持不同商品尺寸的AndroidStaggeredGrid。
对于在中间运行的实际“时间条”,我只需使用一条窄线作为GridView的背景。
时间轴上没有标记。相反,标记将位于EventView本身,无论是在左侧还是右侧,这样标记就会完全落在时间栏上。
这样,当您滚动网格时,它会给出时间栏本身正在滚动的错觉。
要表示空的时间间隔,只需添加一个空的视图,其高度与其所代表的间隔成比例。
希望它有所帮助...
答案 1 :(得分:0)
我不确定你的帖子中有足够的信息来确定布局过程中发生了什么,但RelativeLayout可能会做你需要的。你可以使用leftMargin作为绝对位置,也可以使用像RelativeLayout.LEFT_OF这样的“规则”
也就是说,使用Android框架创建自定义布局非常容易。只需覆盖onMeasure和onLayout。 onMeasure应该报告容器的大小(通常,与父容器一样大),并且非常简单。
onLayout通常如下所示:
@Override
protected void onLayout(boolean changed, int l, int t, int r, int b) {
int count = getChildCount();
for (int i = 0; i < count; i++) {
View child = getChildAt(i);
if (child.getVisibility() != GONE) {
// do the layout for each child here, with child.layout
// e.g., child.layout(0, 0, r, b);
}
}
View.layout需要4个参数 - 顶部,左侧,底部和右侧 - 非常简单。您可以在l,t,r和b中访问容器的尺寸。
HTH