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