我正在开发一个需要与Android 2.2+兼容的应用程序,它使用ActionBarSherlock在预ICS设备上自定义ActionBar。
我只在2.2和2.3设备上遇到问题,即使内容适合设备屏幕,也会使ActionBar的内容溢出。像这样:
我已经测试过(在模拟器上)运行Android 4.0的设备屏幕尺寸(mdpi在320x480上),它运行正常,所以我认为这个问题与ActionBarSherlock有关。
我也试图大幅减少我的图标文件,但即使图像较小,内容仍然溢出。
这是我的styles.xml文件:
<style name="AppBaseTheme" parent="Theme.Sherlock.Light.DarkActionBar">
</style>
<style name="AppTheme" parent="AppBaseTheme">
<item name="actionBarStyle">@style/AppBaseTheme.ActionBarStyle</item>
<item name="actionBarTabStyle">@style/AppBaseTheme.ActionBarTabStyle</item>
<item name="actionBarTabBarStyle">@style/AppBaseTheme.ActionBarTabBarStyle</item>
</style>
<style name="AppBaseTheme.ActionBarStyle" parent="Widget.Sherlock.Light.ActionBar.Solid.Inverse">
<item name="background">@drawable/action_bar_background</item>
<item name="android:background">@drawable/action_bar_background</item>
</style>
<style name="AppBaseTheme.ActionBarTabStyle" parent="Widget.Sherlock.Light.ActionBar.TabView.Inverse">
<item name="background">@android:color/transparent</item>
<item name="android:background">@android:color/transparent</item>
<item name="android:paddingLeft">0dip</item>
<item name="android:paddingRight">0dip</item>
</style>
<style name="AppBaseTheme.ActionBarTabBarStyle" parent="Widget.Sherlock.Light.ActionBar.TabBar.Inverse">
<item name="background">@drawable/action_bar_tab_divider</item>
<item name="android:background">@drawable/action_bar_tab_divider</item>
<item name="divider">@drawable/sp</item>
<item name="android:divider">@drawable/sp</item>
</style>
@ drawable / action_bar_background文件的宽度为320px,@ drawable / action_bar_tab_divider和@ drawable / sp均为1px宽。
以下是在我的主要活动中创建标签的代码:
ActionBar actionBar = super.getSupportActionBar();
actionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS);
this.createTab(actionBar, R.drawable.action_bar_tab_home_off);
this.createTab(actionBar, R.drawable.action_bar_tab_news_off);
this.createTab(actionBar, R.drawable.action_bar_tab_videos_off);
this.createTab(actionBar, R.drawable.action_bar_tab_guide_off);
private void createTab(ActionBar actionBar, int resource) {
Tab t = actionBar.newTab();
t.setTabListener(this);
t.setIcon(resource);
actionBar.addTab(t);
}
有什么想法吗?
答案 0 :(得分:2)
其中一个问题是动作视图“标签栏”自动将图像缩放到预定大小,因此即使您将图标设置为超大或超小,它也应该在操作栏中填充大致相同的空间。
TabBar / TabView也设计为溢出,你已经找到了^。^这对于一次打开10到20个不同标签的应用程序,用户可以滚动它们的列表。不仅如此,选项卡视图很难用于使用固定的非滚动图标列表,因为Android设备有各种形状和大小。
可能适合您所寻找的两个选项。使用布局内的图标创建自己的RelativeLayout
或LinearLayout
。这样您就可以选择操作栏的大小每次 =)您可以将栏停靠在任何Activity
的顶部或底部。
如果这不是一个选项,您可以将图标添加到顶部ActionBar
菜单本身,而不会滚动。但是,您的图标可能并非全部适合主ActionBar
,这会导致任何溢出的图标进入溢出菜单下拉列表。 =(
要删除选项卡之间的分隔符间距,请将以下代码保存为可绘制文件夹中的新xml文件,例如dividerdrawable.xml:
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
android:shape="line" >
<size
android:width="0px"
android:color="@android:color/black"
android:dashWidth="0px"
android:dashGap="0px" />
</shape>
然后将该drawable用于制表符分隔符。
<item name="divider">@drawable/dividerdrawable</item>