我想在 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 属性设置样式的正确方法是什么?