android - 带有自定义布局的ActionBar在Android 4.4.2(KitKat)上不占用全屏宽度

原文 标签 android android-layout android-actionbar

我想显示一个自定义布局的操作栏。自定义布局有三个图像视图,一个位于操作栏的中心,另两个位于操作栏的左右两端。不能有后退按钮或操作项。
这是我用过的:

android.support.v7.app.ActionBar actionBar = getSupportActionBar();

actionBar.setDisplayShowTitleEnabled(false);
actionBar.setDisplayShowCustomEnabled(true);
actionBar.setDisplayUseLogoEnabled(false);
actionBar.setDisplayShowHomeEnabled(false);

ActionBar.LayoutParams lp = new ActionBar.LayoutParams(ActionBar.LayoutParams.MATCH_PARENT, ActionBar.LayoutParams.MATCH_PARENT);
View actionBarView = LayoutInflater.from(this).inflate(resource, null); 
actionBar.setCustomView(actionBarView, lp);

自定义布局已正确充气,但未占用屏幕的整个宽度。这发生在android 4.4.2(kitkat)上。在姜饼上,上面的安排工作正常。
我在以下讨论中尝试了建议的解决方案:
ActionBar - custom view with centered ImageView, Action Items on sides
RelativeLayout/customview doesn't fill tab's width
但问题依然存在。必须有一种方法来强制布局占据整个屏幕宽度。
我正在使用v7 appcompat库中的操作栏。有人知道怎么解决这个问题吗??
编辑1:
以下是XML布局文件:
<RelativeLayout 
            xmlns:android="http://schemas.android.com/apk/res/android"
              android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:layout_gravity="fill_horizontal"
            android:orientation="horizontal">

                    <ImageView
                         android:id="@+id/left_icon"
                         android:background="@drawable/leftbutton"
                         android:layout_width="wrap_content"
                         android:layout_height="wrap_content"
                         android:layout_marginLeft="10dp"
                         android:layout_alignParentLeft="true"
                         android:layout_centerVertical="true"
                         android:adjustViewBounds="true"
                         android:scaleType="centerInside"
                         android:clickable="true"
                         android:onClick="leftButtonPressed"
                         android:hapticFeedbackEnabled="true"
                    />

                    <ImageView
                         android:id="@+id/center_icon"
                         android:background="@drawable/centertitle"
                         android:layout_width="wrap_content"
                         android:layout_height="wrap_content"
                         android:layout_centerInParent="true"
                         android:adjustViewBounds="true"
                         android:scaleType="centerInside"
                    />

                    <ImageView
                         android:id="@+id/right_icon"
                         android:background="@drawable/rightbutton"
                         android:layout_width="wrap_content"
                         android:layout_height="wrap_content"
                         android:layout_marginRight="10dp"
                         android:layout_alignParentRight="true"
                         android:layout_centerVertical="true"
                         android:adjustViewBounds="true"
                         android:scaleType="centerInside"
                         android:clickable="true"
                         android:onClick="rightButtonPressed"
                         android:hapticFeedbackEnabled="true"
                    />
                </RelativeLayout>

以下是姜饼(2.3.5)的外观:
Gingerbread Action Bar http://i62.tinypic.com/4utfu0.png
如你所见,它的膨胀是正确的。下面是它在Kitkat(4.4.2)上的样子:
Kitkat Action Bar http://i59.tinypic.com/vosfex.png
你可以看到右边有一个小间隙,布局没有占据整个宽度。
我不认为布局有问题(它在android 2.3.5上正确膨胀),但我可能错了。告诉我我是不是疯了。
编辑2:
多亏了Doctoror Drivethis post,我才能得到我想要的结果。我知道这有点奇怪:如果你没有任何导航或操作项,为什么要使用操作栏,但这是我的特殊问题所需要的。我有一个tabhost,每个选项卡中都有一堆滑动片段,当显示不同片段时,顶部的线性布局(即操作栏)需要更改其外观。
编辑3:
下面是一些进一步了解这一点的链接:
https://groups.google.com/forum/#!msg/actionbarsherlock/i8JRUkBJjqk/ZzQV9xaM-lkJ
https://groups.google.com/forum/#!topic/android-developers/FGEi72thLzE

最佳答案

不是空白,是右边的菜单溢出按钮。如果你仔细看,你可以看到三个点按钮。
你选错了主题,因为你几乎看不见它。
如果您的actionbar是深色的,并且您需要浅色主题,请使用Theme.Compat.Light.DarkActionBar
在没有物理菜单按钮(大多数是新的)的设备上,会显示菜单溢出按钮。
除非禁用菜单,否则无法删除它。
您可以使用splitActionBarWhenNarrowuiOptions来分割actionbar,使菜单部分位于底部,但这仅用于中等屏幕的垂直方向,可能不是您所需要的。
看看ActionBar Patterns docMenus UI doc

相关文章:

java - Android服务未通过设置初始化变量

java - Android postDelayed Handler在For循环中?

android - 平板电脑的Android多屏支持

android - 使用ScrollView进行缩放缩放:当子大小更改时更新它的滚动行为

java - 启动侧边菜单的操作栏不起作用

android - 在ActionBar上为SearchView创建“历史记录”

c# - 调试HTTP / 1.1 400 Bad Request上的可视Web开发人员Web服务

java - 如何在Android中使用Smack 4.1?

android - 在Android编程中有多少种不同的方式来创建GUI?

java - 使用支持库时以编程方式覆盖操作栏