导航标签的ActionBar随着屏幕方向改变高度

10

我的目标是增加竖屏模式下的 ActionBar 高度。我目前在我的 Themes.xml 文件中设置了

android:actionBarSize

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

我正在使用安卓4.2的Nexus 7进行开发。

在竖屏模式下,如何获得与横屏模式相同的80dp高度?


我也遇到了同样的问题,不知道你是否也在使用这个“反射技巧”来强制嵌入式选项卡在操作栏中。 - mdelolmo
1个回答

10
你写道:

我如何在竖屏模式下得到与横屏模式相同的80dp高度?

通过将 Application 主题属性 android:actionBarSizeActionBar.TabView 样式属性 android:minHeight(或 height)都设置为80 dip。

以下是一个基本示例:


通过将 Application 主题属性 android:actionBarSizeActionBar.TabView 样式属性 android:minHeight(或 height)都设置为80 dip,可以在竖屏模式下获得与横屏模式相同的80dp高度。

以下是一个基本示例:

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

在 Manifest 中设置主题:

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

在Activity的ActionBar中添加一些选项卡:

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

这将产生高度为80dip的选项卡,分别在纵向模式和横向模式下:

enter image description here

enter image description here

编辑:

对于此示例,在清单中设置的SDK版本为:

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

根据OP的说法,这个示例在这些SDK设置下可以工作。但是,如果将targetSkdVersion设置为16或17,则该示例将无法工作。OP已经提交了一个错误报告:


1
我在一个新的示例项目中尝试了你的建议。我在我的Nexus 7和模拟器上运行它。但是它们都没有像你的竖屏模式下高度的图片一样产生结果。在竖屏模式下,高度仍然小于横屏模式下的高度。 - ericharlow
我已将其上传到Github作为一个项目: https://github.com/GunnarKarlsson/TabHeightTest。请尝试在您的Nexus 7上测试它是否产生预期结果。我的屏幕截图来自运行4.03的Galaxy S2。 - Gunnar Karlsson
2
感谢这个项目,它很好用!所以你的项目和我的区别在于AndroidManifest.xml文件中的<uses-sdk android:minSdkVersion="12" android:targetSdkVersion="15" />。如果你将SDK版本更改为16或17,它就会停止工作。我将为Android团队提交一个错误报告。 - ericharlow
1
对于任何对此问题感兴趣的人,请在 https://code.google.com/p/android/issues/detail?id=41792 上为其点赞。 - ericharlow
5
无论minSdkVersiontargetSdkVersion是什么,都无法在我的Nexus 4上的Android 4.3系统中正常工作。选项卡在纵向模式下仍然是默认高度,只有在横向模式下才能看到新的尺寸。有没有人有什么建议?这个问题真的非常令人沮丧!! - Jonathan Ellis

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接