Customizing ActionBar Tabs on Android 4

2020-02-28 02:22发布

问题:

I'm trying to customize Tabs on my ActionBar. I just want to align tabs to phone screen and make it stretchable for various screens. But all I get is this:

The code I use for the theme is this:

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

Is it possible just decrease the font and get rid off those blue lines?

Thanks for help in advance.

P.S.: Also the Button acts weird. The is no text (while it should be)...

回答1:

Edit: Use ActionBarCompat in the support library.


I suggest you use Jake Wharton's ActionBarSherlock for two reasons:

  1. ActionBarSherlock is an extension of the compatibility library that facilitates the use of the action bar across all versions of Android. This means users running your application on pre-HoneyComb versions of Android will be able to use the ActionBar for navigation as well. This is preferable to both the user (since the ActionBar is awesome!) and to you (since you don't have to worry about separating the control flow of your application based on whether or not the ActionBar will be available. For instance, without a pre-HoneyComb compatible ActionBar, you might have to worry about creating multiple Activitys for a single screen... one that is optimized for usage with the ActionBar, and one that can be run on pre-HoneyComb devices.

  2. With ActionBarSherlock, styling your ActionBar is easy! I could go into detail on how to do it, but the library already comes with a LOT of sample code that illustrates how to what you are describing above.

Installing/making use of the library is very easy and is almost identical to making use of the normal ActionBar provided in the Android SDK (mostly just call getSupportActionBar() instead of getActionBar()). If you have any questions, let me know.

p.s. Also note that ActionBarSherlock provides all of the functionalities that the ViewPagerExtensions library provides and more. I would definitely recommend using the former over the latter.



回答2:

There's a brand new tool to generate the correct 9patch images for the actionbar : http://jgilfelt.github.com/android-actionbarstylegenerator/



回答3:

I have found using style guides for the tabs to very inconsistent for honeycomb, It was much easier to just inflate a custom view that does want you want.

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

This to me was much simpler,



回答4:

Change to:

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


回答5:

I think you're inheriting from the wrong style, try:

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

EDIT: also, make sure you use sp instead of dip for font size (14sp)



回答6:

I strongly recommend that you use ViewPagerExtensions library, it give you 5 different styled tabs to you choose from, also the problem that you have to fill tabs in portrait and landscape ,ode for each screen size is already solved in this library.

By the way, if you look inside the library´s code, you can easy theme this yourself.

Also, if you have trouble implementing this with fragment page, look actionbarsherlock-tabs-multi-fragments



回答7:

You can use the setCustomView method.