我想显示一个带有自定义布局的操作栏。自定义布局有三个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 Drive和this post,我得到了我想要的结果。我知道它有点奇怪:如果你不打算使用任何导航或动作项目,为什么要使用Action Bar,但这是我对我的特定问题所需要的。我在每个标签中都有一个带有一叠滑动片段的TabHost,当显示不同的片段时,顶部的LinearLayout(即操作栏)需要更改其外观。
编辑3:
以下是一些可以进一步理解这一点的链接:
答案 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,使菜单部分位于底部,但这只适用于中画面的垂直方向,可能不是你需要的