在 Android 4 上自定义 ActionBar 选项卡
Posted
技术标签:
【中文标题】在 Android 4 上自定义 ActionBar 选项卡【英文标题】:Customizing ActionBar Tabs on Android 4 【发布时间】:2012-05-03 14:35:49 【问题描述】:我正在尝试自定义 ActionBar 上的选项卡。我只想将标签与手机屏幕对齐,并使其可伸缩以适应各种屏幕。但我得到的只是:
我用于主题的代码是这样的:
<?xml version="1.0" encoding="utf-8"?>
<resources>
<style name="MyTheme" parent="@android:style/Theme.Holo.Light">
<item name="android:actionBarTabTextStyle">@style/MyActionBarTabTextStyle</item>
</style>
<style name="MyActionBarTabTextStyle" parent="@android:style/Widget.Holo.Light.Tab">
<item name="android:textSize">14dip</item>
<item name="android:padding">0dip</item>
</style>
</resources>
是否有可能只是减少字体并去掉那些蓝线?
提前感谢您的帮助。
P.S.:Button 的行为也很奇怪。没有文本(虽然它应该是)...
【问题讨论】:
只是为了澄清一下,当您说“只想将标签与手机屏幕对齐并使其可在各种屏幕上拉伸”时,您是否希望标签文本始终显示在标签中的一行上,选项卡水平拉伸以便为文本腾出空间? 不,标签文本可以是 2 行或 3 行,但我希望标签填满屏幕的宽度(纵向,横向就可以了,就像现在一样)。看标签三,你只能看到它的一半......前两个标签太宽了,它们不应该,所以我想降低字体大小和标签宽度以适应它(我会喜欢对标签宽度(或标签)使用某种“百分比度量”,而不是固定的,比如 px)。 【参考方案1】:编辑:在支持库中使用ActionBarCompat
。
我建议你使用 Jake Wharton 的 ActionBarSherlock 有两个原因:
ActionBarSherlock 是兼容性库的扩展,有助于在所有 Android 版本中使用操作栏。这意味着在 HoneyComb 之前的 Android 版本上运行您的应用程序的用户也可以使用ActionBar
进行导航。这对用户(因为ActionBar
太棒了!)和您(因为您不必担心根据ActionBar
是否可用来分离应用程序的控制流)都更可取。例如,如果没有预 HoneyComb 兼容的ActionBar
,您可能不得不担心为单个屏幕创建多个Activity
s……一个针对ActionBar
的使用进行了优化,一个可以运行在 HoneyComb 之前的设备上。
有了 ActionBarSherlock,styling 你的 ActionBar 很简单!我可以详细介绍如何做到这一点,但该库已经附带了很多 sample code 来说明您在上面描述的内容。
安装/使用该库非常简单,几乎与使用 Android SDK 中提供的普通ActionBar
相同(通常只调用getSupportActionBar()
而不是getActionBar()
)。如果您有任何问题,请告诉我。
附言另请注意,ActionBarSherlock
提供了 ViewPagerExtensions 库提供的所有功能等等。我肯定会推荐使用前者而不是后者。
【讨论】:
Jake Worton 不建议任何人在你的目标是 android 4+ 时使用 actionbar sherlock @just_user 我在ActionBarCompat
发布前一年写了这个答案。你应该改用ActionBarCompat
。【参考方案2】:
有一个全新的工具可以为操作栏生成正确的 9patch 图像:http://jgilfelt.github.com/android-actionbarstylegenerator/
【讨论】:
【参考方案3】:我发现使用选项卡的样式指南对于蜂窝非常不一致,只为你想要的自定义视图充气要容易得多。
Fragment serivceFrag = new ServicesFragment();
Tab serviceTab = bar.newTab();
TextViewPlus serviceTabTextView =(TextViewPlus)getLayoutInflater().inflate(R.layout.tab_item_layout, null);
serviceTabTextView.setText(servicesLabel);
serviceTab.setCustomView(serviceTabTextView);
serviceTab.setTabListener(new TabListenerFragment(serivceFrag,"Service",R.id.MainInfoPaneFragment));
bar.addTab(serviceTab);
这对我来说要简单得多,
【讨论】:
【参考方案4】:改为:
<style name="MyActionBarTabTextStyle" parent="@android:style/Widget.Holo.ActionBar.TabText">
<item name="android:textSize">14dip</item>
<item name="android:padding">0dip</item>
</style>
【讨论】:
【参考方案5】:我认为您继承了错误的样式,请尝试:
<style name="MyActionBarTabTextStyle" parent="android:TextAppearance.Holo.Widget.ActionBar.Title">
<item name="android:textSize">14sp</item>
<item name="android:padding">0dip</item>
</style>
编辑:另外,请确保您使用 sp 而不是 dip 字体大小(14sp)
【讨论】:
【参考方案6】:我强烈推荐你使用ViewPagerExtensions library,它为你提供了 5 种不同样式的标签供你选择,而且你必须在纵向和横向填充标签的问题,每个屏幕尺寸的 ode 已经在这个库中解决了.
顺便说一句,如果您查看库的代码,您可以自己简单地设置主题。
另外,如果您在使用片段页面时遇到问题,请查看actionbarsherlock-tabs-multi-fragments
【讨论】:
【参考方案7】:您可以使用setCustomView 方法。
【讨论】:
以上是关于在 Android 4 上自定义 ActionBar 选项卡的主要内容,如果未能解决你的问题,请参考以下文章
令牌服务器上自定义端点的 Identity Server 4 客户端凭据