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

发布于 2025-01-04 16:33:18 字数 1015 浏览 0 评论 0原文

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

I'd like to draw over one of the tab icons of the actionbarsherlock.  To do this,  instead of setting a tab icon, I'm trying to create a view that will be styled exactly the same as the other ABS tabs. It looks like abs4 is adding the tabs to a ScrollingTabContainerView. The TabView class in ScrollingTabContainerView seems to be responsible for taking the icons and laying them out in the center of the tabs, so I've modeled the following code on that code found in its update() method.

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);

Then I call setCustomView() with ll on the Tab. When I want to write over the tab, I can do so by retrieving the view from the tab with getCustomView.

If I do not specify  the creation of the LinearLayout above with android.R.attr.actionBarTabStyle it works, but the icon is not laid out in the center of the tab.  If I set the attributes with that Id, my app crashes on startup with a NoSuchMethodError from android.widget.LinearLayout.

What's the proper way to set a style using an android attribute?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

执手闯天涯 2025-01-11 16:33:18

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

该库利用系统布局膨胀器通过在 XML 中指定默认样式来解决此问题。你可以做同样的事情:

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

然后简单地:

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

The 3-arg LinearLayout constructor was only added in API 11.

The library leverages the system layout inflater to get around this by specifying the default style in XML. You can do the same:

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

and then simply:

LineraLayout tabView = LayoutInflater.from(context).inflate(R.layout.my_tab, null);
//set your layout params and setCustomView
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文