为ActionBar Sherlock选项卡设置自定义视图

时间:2012-02-10 23:38:54

标签: android actionbarsherlock

我想绘制actionbarsherlock的一个标签图标。为此,我尝试创建一个与其他ABS选项卡完全相同的视图,而不是设置选项卡图标。看起来abs4正在将选项卡添加到ScrollingTabContainerView。 ScrollingTabContainerView中的TabView类似乎负责获取图标并将它们放在选项卡的中心,因此我在其update()方法中的代码上建模了以下代码。

Drawable icon = getResources().getDrawable(resid);
LinearLayout ll = new LinearLayout(this, null, android.R.attr.actionBarTabStyle);
ImageView iconView = new ImageView(this);
ActionBar.LayoutParams lp = new ActionBar.LayoutParams(LayoutParams.WRAP_CONTENT,
                LayoutParams.WRAP_CONTENT);
lp.gravity = Gravity.CENTER_VERTICAL;
iconView.setLayoutParams(lp);
ll.addView(iconView, 0);
iconView.setImageDrawable(icon);

然后我在Tab上用ll调用setCustomView()。当我想在选项卡上书写时,我可以通过使用getCustomView从选项卡中检索视图来实现。

如果我没有使用android.R.attr.actionBarTabStyle指定上面的LinearLayout的创建,它可以工作,但图标没有在选项卡的中心布局。如果我使用该Id设置属性,我的应用程序在启动时崩溃,并使用来自android.widget.LinearLayout的NoSuchMethodError。

使用android属性设置样式的正确方法是什么?

1 个答案:

答案 0 :(得分:2)

3-arg LinearLayout构造函数仅在API 11中添加。

库利用系统布局inflater通过在XML中指定默认样式来解决这个问题。你也可以这样做:

<LinearLayout style="?attr/actionBarTabStyle" />

然后简单地说:

LineraLayout tabView = LayoutInflater.from(context).inflate(R.layout.my_tab, null);
//set your layout params and setCustomView