gpt4 book ai didi

android - GMail 中的 ListView 行标记

转载 作者:太空狗 更新时间:2023-10-29 13:40:44 24 4
gpt4 key购买 nike

我有兴趣创建一个 ListView,其中每一行都按照在 GMail 3.0+ 中的方式进行标记。这创建了左右 ListFragment 的良好分离。

其他示例还包括 2.3.4 版的 Google 日历,例如,颜色标记位于 ListView 的左侧。

GMail ListView

查看两个列表之间的灰色垂直分隔线。一个人如何实现这样的目标?一个好处也是交替宽度,但我想这只是一个较小的布局变化。

我知道我可能会做一些事情,比如在其中插入一个 ImageView,然后用我想要的颜色填充它,但在我看来,这是一个丑陋的 hack。

另一个问题是,是否有一种通用的方法可以像 GMail 或 Mail 应用程序那样以某种方式组合两个 ListView fragment 。

GMail ListView across two fragments

最佳答案

如果你想要速度,那么我会选择的选项是为行容器 View 使用自定义 View 类(例如扩展 RelativeLayout)并覆盖 dispatchDraw(Canvas canvas) 方法。

dispatchDraw 方法在 View 绘制其自己的内容之后并且在绘制其子项之前时被调用 - 当您绘制子项时调用 super.dispatchDraw

用它来做类似的事情

private boolean mDrawMarker = false;

public void setShouldDrawMarker(boolean drawMarker) {
mDrawMarker = drawMarker;
}
public boolean getShouldDrawMarker() {
return mDrawMarker;
}

@Override
public void dispatchDraw(Canvas canvas) {
// draw the children of our view
super.dispatchDraw(canvas);

// draw our marker on top of the children if needed
if (mDrawMarker) {
// e.g. canvas.drawRect(...) or canvas.drawBitmap(...)
}
}

这样您就可以避免向层次结构中添加任何额外的 View ,这意味着您不会在布局或测量阶段受到任何惩罚。如果绘制矩形而不是每次都创建一个新矩形,请记住重新使用 PaintRect 对象。同样,如果您使用位图,您应该在 View 的所有实例中共享同一个位图实例,而不是每次都从您的资源中加载一个新的位图(这意味着将它们放在static字段)

对于项目的缩进,因为在这种情况下,列表似乎没有重叠,您可以(不在我的脑海中):

  • 在行容器上设置左边距(不确定这是否有效)
  • 将行容器包裹在 LinearLayout 中,并在其上设置左内边距(如果上述方法不起作用)
  • 使用自定义 View 类(如果设置左边距不起作用)
  • 采纳@commonsware 的建议并使用两个 View - 一个在左侧带有灰色背景颜色,另一个在右侧带有标记颜色 - 然后如果您想要缩进,只需将左侧的 View 设置为可见/消失/无缩进

至于第二个例子中的 View 重叠,我会遵从@commonsware 的回答。

关于android - GMail 中的 ListView 行标记,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6075235/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com