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

时间:2014-05-21 12:36:45

标签: android android-layout android-actionbar

我想显示一个带有自定义布局的操作栏。自定义布局有三个ImageView,一个位于中央,另外两个位于左侧和右侧。操作栏的右端。必须没有后退按钮或操作项。

以下是我用过的内容:

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)上发生。在姜饼上,上述安排工作正常。

我在以下讨论中尝试了推荐的解决方案:

然而问题仍然存在。必须有一种方法来强制布局占据整个屏幕宽度。

我正在使用V7 AppCompat库中的Action Bar。有没有人知道解决这个问题?

编辑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>

以下是Gingerbread(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,我得到了我想要的结果。我知道它有点奇怪:如果你不打算使用任何导航或动作项目,为什么要使用Action Bar,但这是我对我的特定问题所需要的。我在每个标签中都有一个带有一叠滑动片段的TabHost,当显示不同的片段时,顶部的LinearLayout(即操作栏)需要更改其外观。

编辑3:

以下是一些可以进一步理解这一点的链接:

2 个答案:

答案 0 :(得分:2)

就我而言,我已经解决了绕过调用LayoutInflater的问题。

所以应该简单地替换这段代码:

View actionBarView = LayoutInflater.from(this).inflate(R.layout.custom_actionbar, null); 
actionBar.setCustomView(actionBarView, lp);

使用此代码:

actionBar.setCustomView(R.layout.custom_actionbar);

答案 1 :(得分:1)

这不是间隙,它是右边的菜单溢出按钮。如果仔细观察,可以看到三个圆点按钮。

你选择了错误的主题,因为你几乎看不到它。 如果您的ActionBar很暗并且您需要灯光主题,请使用Theme.Compat.Light.DarkActionBar

在没有物理菜单按钮(主要是新的)按钮的设备上,会显示菜单溢出按钮。

除非禁用菜单,否则无法将其删除。

你可以使用splitActionBarWhenNarrow uiOptions分割ActionBar,使菜单部分位于底部,但这只适用于中画面的垂直方向,可能不是你需要的

查看ActionBar Patterns docMenus UI doc