Подтвердить что ты не робот

ActionBar с вкладками навигации изменяет высоту с ориентацией экрана

Моя цель - увеличить высоту ActionBar для портретного режима. В настоящее время я устанавливаю

андроида: actionBarSize

в Mymes.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>

Я получаю желаемый эффект в ландшафтном режиме, где я увеличил высоту ActionBar до 80dp.

enter image description here

Однако, поехав, я поворачиваю экран в портретный режим, высота изменяется так.

enter image description here

Примечание. Я делаю следующие вызовы в коде.

final ActionBar bar = getActionBar();
bar.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS);
bar.setDisplayShowTitleEnabled(false);
bar.setDisplayShowHomeEnabled(false);

Я развиваюсь на Nexus 7 с Android 4.2.

Как получить ту же высоту 80dp в портретном режиме, что и в ландшафтном режиме?

4b9b3361

Ответ 1

Вы писали:

Как получить ту же высоту 80dp в портретном режиме, что и в ландшафтном режиме?

Установив оба атрибут Application темы android:actionBarSize и атрибута стиля ActionBar.TabView android:minHeight (или height) до 80 dip.

Основной пример:

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

Задайте тему в манифесте:

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

Добавьте несколько вкладок в ActionBar в 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);
}

Это создает вкладки с 80 высотой падения в портретном режиме:

enter image description here

и вкладки с 80 глубиной падения в ландшафтном режиме:

enter image description here

ИЗМЕНИТЬ:

В этом примере версии SDK в манифесте были установлены на:

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

Согласно OP, пример работает с этими настройками SDK. Однако, если вместо targetSkdVersion установлено значение 16 или 17, пример не работает. OP отправил отчет об ошибке: