带有导航选项卡的 ActionBar 随屏幕方向改变高度
Posted
技术标签:
【中文标题】带有导航选项卡的 ActionBar 随屏幕方向改变高度【英文标题】:ActionBar with navigation tabs changes height with screen orientation 【发布时间】:2012-11-29 10:46:34 【问题描述】:我的目标是增加纵向模式的ActionBar
高度。我目前设置了
android: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。
但是,我将屏幕旋转到纵向模式时,高度会像这样变化。
请注意,我在代码中进行了以下调用。
final ActionBar bar = getActionBar();
bar.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS);
bar.setDisplayShowTitleEnabled(false);
bar.setDisplayShowHomeEnabled(false);
我正在使用 android 4.2 的 Nexus 7 上进行开发。
如何在纵向模式下获得与横向模式下相同的 80dp 高度?
【问题讨论】:
我遇到了同样的问题,我想知道您是否也在使用这种“反射黑客”来强制在操作栏中嵌入标签。 【参考方案1】:你写道:
如何在纵向模式下获得与横向模式下相同的 80dp 高度?
通过将 both 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>
在 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);
这会在纵向模式下生成倾斜高度为 80 的标签:
以及横向模式下倾角高度为 80 的标签:
编辑:
对于本例,Manifest 中的 SDK 版本设置为:
android:minSdkVersion="12"
android:targetSdkVersion="15"
根据 OP,该示例适用于这些 SDK 设置。但是,如果 targetSkdVersion
改为设置为 16 或 17,则该示例不起作用。 OP 已提交bug report:
【讨论】:
我在一个新的示例项目中尝试了您的建议。我在我的nexus 7和模拟器上运行它。它们都没有产生像您在纵向模式下的高度图片那样的结果。纵向模式下的高度仍然小于横向模式下的高度。 我已经将它作为一个项目上传到了 github:github.com/GunnarKarlsson/TabHeightTest。试试它是否在你的 nexus 7 上产生了预期的结果。我的屏幕截图来自运行 4.03 的 Galaxy S2。 感谢它的项目!因此,您的项目和我的项目之间的区别在于 AndroidManifest.xml。minSdkVersion
或 targetSdkVersion
)。标签只是纵向的默认高度,新的尺寸只发生在横向.有人有什么建议吗?这个问题真的令人沮丧!!以上是关于带有导航选项卡的 ActionBar 随屏幕方向改变高度的主要内容,如果未能解决你的问题,请参考以下文章
如何使用底部导航菜单处理屏幕旋转,其中每个菜单都引用一个带有有限选项卡的新查看器(3-4)?我正在使用 ViewModel