带有分频器的LinearLayout在预蜂窝上

时间:2012-08-27 15:43:16

标签: android android-layout android-linearlayout android-support-library android-compatibility

从API级别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的兼容性库中。

2 个答案:

答案 0 :(得分:10)

如果我没弄错的话,ActionBarSherlock库已经实现了它,以提供向后兼容的ActionBar选项卡。您可能希望首先包含该库,然后在滚动自己之前给它一个旋转。

这是特定类的the code(com.actionbarsherlock.internal.widget.IcsLinearLayout)。

答案 1 :(得分:1)

IcsLinearLayout是内部的,因为ActionBarSherlock不再更新,所以建议使用Google的名为“LinearLayoutICS”。

阅读here如何使用它。