ActionBar在预ICS设备上溢出

时间:2013-08-09 23:21:04

标签: android actionbarsherlock

我正在开发一个需要与Android 2.2+兼容的应用程序,它使用ActionBarSherlock在预ICS设备上自定义ActionBar。

我只在2.2和2.3设备上遇到问题,即使内容适合设备屏幕,也会使ActionBar的内容溢出。像这样:

enter image description here

我已经测试过(在模拟器上)运行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);
}

有什么想法吗?

1 个答案:

答案 0 :(得分:2)

其中一个问题是动作视图“标签栏”自动将图像缩放到预定大小,因此即使您将图标设置为超大或超小,它也应该在操作栏中填充大致相同的空间。

TabBar / TabView也设计为溢出,你已经找到了^。^这对于一次打开10到20个不同标签的应用程序,用户可以滚动它们的列表。不仅如此,选项卡视图很难用于使用固定的非滚动图标列表,因为Android设备有各种形状和大小。

可能适合您所寻找的两个选项。使用布局内的图标创建自己的RelativeLayoutLinearLayout。这样您就可以选择操作栏的大小每次 =)您可以将栏停靠在任何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>