带有导航标签的ActionBar会根据屏幕方向更改高度

时间:2012-12-11 20:13:36

标签: android android-actionbar android-tabs nexus-7

我的目标是增加纵向模式的ActionBar高度。我目前正在设置

  

机器人:actionBarSize

在我的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>

我在横向模式下获得了所需的效果,我将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);

我正在使用Android 4.2开发Nexus 7。

如何在横向模式下以纵向模式获得相同的80dp高度?

1 个答案:

答案 0 :(得分:10)

您写道:

  

如何在横向模式下以纵向模式获得相同的80dp高度?

通过设置 Application主题属性android:actionBarSize ActionBar.TabView样式属性android:minHeight(或{ {1}})到80度。

一个基本的例子:

height

在Manifest中设置主题:

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

在Activity中为ActionBar添加一些标签:

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

这会在纵向模式下生成80倾角高度的标签:

enter image description here

以横向模式显示80倾角的标签:

enter image description here

编辑:

对于此示例,Manifest中的SDK版本设置为:

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

根据OP,该示例适用于这些SDK设置。但是,如果将android:minSdkVersion="12" android:targetSdkVersion="15" 设置为16或17,则该示例不起作用。 OP提交了bug report: