ActionBar with navigation tabs changes height with screen orientation

android, android-actionbar, android-tabs, nexus-7

Solution

You wrote:

How do I get the same 80dp height in portrait mode that I have in landscape mode?

By setting both the `Application` theme attribute `android:actionBarSize` and the `ActionBar.TabView` style attribute `android:minHeight` (or `height`) to 80 dip.

A basic example:

<style name="ThemeHoloWithActionBar" parent="android:Theme.Holo.Light">
    <item name="android:actionBarTabStyle">@style/ActionBarTabStyle</item>
    <item name="android:actionBarSize">80dip</item>
</style>

<style name="ActionBarTabStyle" parent="@android:style/Widget.Holo.ActionBar.TabView">
    <item name="android:minHeight">80dip</item>
</style>

Set theme in Manifest:

   <application
    android:icon="@drawable/ic_launcher"
    android:label="@string/app_name"
    android:theme="@style/ThemeHoloWithActionBar" >

Add some tabs to the ActionBar in an Activity:

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    ActionBar actionbar = getActionBar();
    actionbar.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS);
    actionbar.setDisplayShowTitleEnabled(false);
    actionbar.setDisplayShowHomeEnabled(false);
    ActionBar.Tab tabA = actionbar.newTab().setText("Tab A");
    ActionBar.Tab tabB = actionbar.newTab().setText("Tab B");
    ActionBar.Tab tabC = actionbar.newTab().setText("Tab C");

    tabA.setTabListener(new MyTabsListener());
    tabB.setTabListener(new MyTabsListener());
    tabC.setTabListener(new MyTabsListener());

    actionbar.addTab(tabA);
    actionbar.addTab(tabB);
    actionbar.addTab(tabC);
}

This produces tabs with 80 dip height in portrait mode:

and tabs with 80 dip height in landscape mode:

EDIT:

For this example, SDK versions in the Manifest were set to:

android:minSdkVersion="12"
android:targetSdkVersion="15"

According to OP, the example works with these SDK settings. However, if `targetSkdVersion` is instead set to 16 or 17, the example doesn't work. OP has filed a bug report:

Problem

My goal is to increase the `ActionBar` height for portrait mode. I currently set android:actionBarSize in my Themes.xml. ``` <?xml version="1.0" encoding="utf-8"?> <resources xmlns:android="http://schemas.android.com/apk/res/android"> <style name="DayTheme" parent="android:style/Theme.Holo.Light"> <item name="android:actionBarSize">@dimen/actionBarHeight</item> <item name="android:actionBarTabTextStyle">@style/tab_indicator_text_dark</item> </style> <style name="NightTheme" parent="android:style/Theme.Holo"> <item name="android:actionBarSize">@dimen/actionBarHeight</item> <item name="android:actionBarTabTextStyle">@style/tab_indicator_text_light</item> </style> </resources> ``` I get the desired effect in landscape mode where I have increased the `ActionBar` height to 80dp. However, went I rotate the screen into portrait mode the height changes like so. Note I make the following calls in code. ``` final ActionBar bar = getActionBar(); bar.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS); bar.setDisplayShowTitleEnabled(false); bar.setDisplayShowHomeEnabled(false); ``` I am developing on a Nexus 7 with android 4.2. How do I get the same 80dp height in portrait mode that I have in landscape mode?

Original source