5

从 API 级别 11开始setDividerDrawable()setShowDividers()在 上引入LinearLayout,使线性布局能够显示子元素之间的分隔线。我真的很想使用此功能,但我也针对 Honeycomb 之前的设备(API 级别 < 11)。

解决此问题的一种方法是扩展 LinearLayout 并手动添加分隔线。这是一个原型:

import android.content.Context;
import android.util.AttributeSet;
import android.view.LayoutInflater;
import android.view.View;
import android.widget.LinearLayout;

public class DividerLinearLayout extends LinearLayout
{
    public DividerLinearLayout(Context context)
    {
        super(context);
    }

    public DividerLinearLayout(Context context, AttributeSet attrs)
    {
        super(context, attrs);
    }

    public DividerLinearLayout(Context context, AttributeSet attrs, int defStyle)
    {
        super(context, attrs, defStyle);
    }

    @Override
    public void addView(View child)
    {
        if(super.getChildCount() > 0)
        {
            super.addView(LayoutInflater.from(getContext()).inflate(R.layout.divider, null));
        }
        super.addView(child);
    }
}

然而,使用这样的实现将改变任何客户端迭代子节点的行为。有些视图是客户自己插入的,有些是由DividerLinearLayout. 如果用户在指定索引处插入视图,也会出现问题。可以实现索引的转换,但是如果做错了,这可能会导致严重的错误。另外,我认为需要覆盖更多的方法。

有没有更好的方法来解决这个问题?是否有人已经开发出可免费使用的DividerLinearLayout等价物?它似乎不存在于 Android 的兼容性库中。

4

2 回答 2

10

如果我没记错的话,ActionBarSherlock 库已经实现了这一点,以提供向后兼容的 ActionBar 选项卡。您可能希望首先包含该库并在滚动您自己的之前试一试。

这是特定类的代码(com.actionbarsherlock.internal.widget.IcsLinearLayout)。

于 2012-08-27T16:07:03.443 回答
1

IcsLinearLayout 是内部的,由于 ActionBarSherlock 将不再更新,因此建议使用 Google 的一种,称为“LinearLayoutICS”。

在这里阅读如何使用它。

于 2014-03-21T10:23:44.710 回答