1

我想在 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);

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

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

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

4

1 回答 1

2

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

该库利用系统布局充气器通过在 XML 中指定默认样式来解决此问题。你也可以做到的:

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

然后简单地说:

LineraLayout tabView = LayoutInflater.from(context).inflate(R.layout.my_tab, null);
//set your layout params and setCustomView
于 2012-02-16T23:35:56.043 回答