在Android 4上自定义ActionBar选项卡

时间:2012-04-22 22:49:00

标签: java android android-layout android-theme android-actionbar

我正在尝试在ActionBar上自定义Tabs。我只想将标签对齐到手机屏幕,使其可以伸展各种屏幕。但我得到的只是:

enter image description here

我用于主题的代码是:

<?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。:按钮也很奇怪。这不是文本(虽然它应该是......)

7 个答案:

答案 0 :(得分:13)

修改:在支持库中使用ActionBarCompat


我建议你使用杰克沃顿的ActionBarSherlock,原因有两个:

  1. ActionBarSherlock是兼容性库的扩展,便于在所有Android版本中使用操作栏。这意味着在预HoneyComb版本的Android上运行应用程序的用户也可以使用ActionBar进行导航。这对于用户(因为ActionBar非常棒!)和您(因为您不必担心根据ActionBar是否将应用程序的控制流分离是一件好事。例如,如果没有预先与HoneyComb兼容的ActionBar,您可能不得不担心为单个屏幕创建多个Activity ...一个针对{{{ 1}},以及可以在预HoneyComb设备上运行的那个。

  2. 使用ActionBarSherlock,styling您的ActionBar很简单!我可以详细介绍如何做到这一点,但是图书馆已经有很多sample code,它说明了你在上面描述的内容。

  3. 安装/使用该库非常简单,与使用Android SDK中提供的常规ActionBar几乎完全相同(主要是调用ActionBar而不是getSupportActionBar()) 。如果您有任何疑问,请告诉我。

    P.S。另请注意,getActionBar()提供了ViewPagerExtensions库提供的所有功能以及更多功能。我肯定会建议使用前者而不是后者。

答案 1 :(得分:7)

有一个全新的工具可以为操作栏生成正确的9patch图像:http://jgilfelt.github.com/android-actionbarstylegenerator/

答案 2 :(得分:4)

我发现使用标签的样式指南与蜂窝非常不一致,只需要为想要的自定义视图充气就容易得多。

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

这对我来说简单得多,

答案 3 :(得分:4)

更改为:

<style name="MyActionBarTabTextStyle" parent="@android:style/Widget.Holo.ActionBar.TabText">
     <item name="android:textSize">14dip</item>
     <item name="android:padding">0dip</item>
</style>

答案 4 :(得分:1)

我认为你是从错误的风格继承而来,试试:

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

答案 5 :(得分:1)

我强烈建议您使用ViewPagerExtensions library,它会为您提供5种不同风格的标签供您选择,还有您需要在纵向和横向填充标签的问题,每个屏幕尺寸的颂歌已经解决了这个图书馆。

顺便说一下,如果你查看一下图书馆的代码,你可以自己轻松地主题化。

此外,如果您在使用片段页面实现此功能时遇到问题,请查看actionbarsherlock-tabs-multi-fragments

答案 6 :(得分:0)

您可以使用setCustomView方法。