在我的应用程序中,我使用ActionBar
(nether ABS或支持操作栏!minSDK = 14)。用户可以选择是使用图标还是基于文本的选项卡。
在处理屏幕旋转时我仍然面临一些问题。基本上,我在顶部设置了customView
(使用getActionBar.setCustomView()
),其中放置了一些文本和控件元素。在纵向模式下,一切正常,但旋转设备会弄乱我的UI。
我发布了一些截图来说明问题(图标已更改为虚拟)。
这里的问题是标签堆叠,我发现没有办法强迫ActionBar
保持二线。如果你知道怎么做,我会非常感谢解决方案。
因此,基于ActionBar
在横向模式下保持单行的事实,我至少尝试自定义选项卡文本背后的背景以匹配我的设计并且它有效。
真正的问题从图标模式开始。肖像:
这里的一切都很好。旋转设备:
正如您所看到的,customView
并且标签区域在一行中没有空格。但是由于android开发团队认为他们的ActionBar
比我们聪明,系统完全忽略了空间不足,将标签按在一起并将customView
放在右边,使其与标签重叠。这完全搞砸了我的UI,我正在寻找任何可能的解决方案(由于某些原因,我被迫使用ActionBar
而不是其他东西。)
如果您需要一些与设置ActionBar相关的代码,我会发布它,虽然它几乎是默认实现,所以我认为这与问题无关。我问的是如何解决上述问题的一些基本想法。
答案 0 :(得分:1)
您可以使用反射强制标签在纵向和横向模式下以两行显示。 ActionBarImpl#setHasEmbeddedTabs(boolean)
控制是否嵌入选项卡(显示为下拉列表)。通过反射,我们将布尔值false
传递给它。
查看以下内容是否有帮助:
ActionBar mActionBar = getActionBar();
// Set navigation mode
mActionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS);
// Initialize and add tabs
for (int i=1; i <= 20; i++) {
Tab tab = mActionBar.newTab();
tab.setText("Tab " + i);
tab.setTabListener(this);
mActionBar.addTab(tab);
}
Method setHasEmbeddedTabsMethod = null;
try {
setHasEmbeddedTabsMethod = mActionBar.getClass().
getDeclaredMethod("setHasEmbeddedTabs",
boolean.class);
} catch (NoSuchMethodException e1) {
e1.printStackTrace();
}
setHasEmbeddedTabsMethod.setAccessible(true);
try {
setHasEmbeddedTabsMethod.invoke(mActionBar, false);
} catch (IllegalArgumentException e) {
e.printStackTrace();
} catch (IllegalAccessException e) {
e.printStackTrace();
} catch (InvocationTargetException e) {
e.printStackTrace();
}