我正在使用一个自定义的动作栏视图,正如你在下面的截图中看到的,在动作栏中有一个空白的灰色空间。我想把它去掉。

我做了什么?

res / values-v11 / styles.xml

<style name="AppBaseTheme" parent="@style/Theme.AppCompat.Light">
        <item name="android:actionBarStyle">@style/ActionBarStyle</item>
        <item name="actionBarStyle">@style/ActionBarStyle</item>
</style>

res /价值/ my_custom_actionbar.xml

<resources xmlns:android="http://schemas.android.com/apk/res/android">
    <style name="ActionBarStyle" parent="@style/Widget.AppCompat.Light.ActionBar.Solid">
        <item name="android:height">60dp</item>
    </style>
</resources>

清单

<uses-sdk
        android:minSdkVersion="10"
        android:targetSdkVersion="19" />

<application
            android:icon="@drawable/ic_launcher"
            android:label="@string/AppName"
            android:theme="@style/AppBaseTheme" >
    <!-- activities... etc -->
</application>

MainActivity

public void onCreate(Bundle bundle) {
    super.onCreate(bundle);

    ActionBar actionbar = getSupportActionBar();

    actionbar.setDefaultDisplayHomeAsUpEnabled(false);
    actionbar.setDisplayHomeAsUpEnabled(false);
    actionbar.setDisplayShowCustomEnabled(true);
    actionbar.setDisplayShowHomeEnabled(false);
    actionbar.setDisplayShowTitleEnabled(false);
    actionbar.setDisplayUseLogoEnabled(false);
    actionbar.setHomeButtonEnabled(false);

    // Add the custom layout
    View view = LayoutInflater.from(this).inflate(R.layout.actionbar, null, false);
    actionbar.setCustomView(view);
}

我发现了一个最近的帖子,指出有一个问题与最新发布。我也更新了ADT和SDK到Android 5。

Android ActionBar的自定义视图不填充父元素

我不知道该怎么办。

编辑(部分解决方案):

不能在Android上工作<= API 10。

Android棒棒糖,AppCompat ActionBar自定义视图不占用整个屏幕宽度

我改变了什么:

使用最新sdk版本:

<uses-sdk
        android:minSdkVersion="10"
        android:targetSdkVersion="21" />

添加一个toolbarStyle:

<style name="AppBaseTheme" parent="@style/Theme.AppCompat.Light">
        <item name="android:actionBarStyle">@style/ActionBarStyle</item>
        <item name="actionBarStyle">@style/ActionBarStyle</item>

        <item name="android:toolbarStyle">@style/ToolbarStyle</item>
        <item name="toolbarStyle">@style/ToolbarStyle</item>
</style>

<style name="ToolbarStyle" parent="@style/Widget.AppCompat.Toolbar">
    <item name="contentInsetStart">0dp</item>
    <item name="android:contentInsetStart">0dp</item>
</style>

当前回答

最好在应用程序动作栏的样式中添加一个背景项,以与自定义动作栏的背景颜色保持一致:

<item name="android:background">@color/actionbar_bgcolor</item>

在android6.0之后,操作栏甚至有一个右边框,无法设置。在活动中添加一个右边距调整,如下所示:(视图是自定义的动作栏或其中的右键)

int rightMargin = Build.VERSION.SDK_INT>=Build.VERSION_CODES.M ? 0 : 8; // may the same with actionbar leftMargin in px
ViewGroup.MarginLayoutParams p = (ViewGroup.MarginLayoutParams) view.getLayoutParams();
p.setMargins(p.leftMargin, p.topMargin, rightMargin, p.bottomMargin);
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN_MR1){
    p.setMarginEnd(rightMargin);
}
view.setLayoutParams(p);

动作栏机制只是在Android 3.0+应用程序之后才被支持。如果我们使用工具栏(支持库v7),我们应该在每个活动的每个xml中布局它,并注意与Android 5.0或更高版本设备中的系统状态栏重叠的问题。

其他回答

只需将app:contentInsetStart="0dp"添加到工具栏的XML属性中。

左边的插入是由工具栏的contentInsetStart造成的,默认情况下是16dp。

将其更改为与关键行对齐。

支持库v24.0.0的更新:

为了匹配材质设计规范,有一个额外的属性contentInsetStartWithNavigation,默认为16dp。如果您也有导航图标,请更改此选项。

事实证明,这是设计库第24版引入的新材料设计规范的一部分。

https://material.google.com/patterns/navigation.html

但是,可以通过向Toolbar小部件添加以下属性来删除额外的空间。

app:contentInsetStartWithNavigation="0dp"

之前:

后:

在xml中为工具栏标签添加以下两个属性:

app:contentInsetEnd="0dp"
app:contentInsetStart="0dp"

并在代码中添加这些行:

// remove extra padding of toolbar
toolbar.setContentInsetsAbsolute(0, 0);
toolbar.setPadding(0, 0, 0, 0);

在手机和平板设备上都进行了测试。

<android.support.v7.widget.Toolbar
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
android:layout_height="wrap_content"
app:contentInsetLeft="0dp"
app:contentInsetStart="0dp"
android:paddingLeft="0dp">

这应该足够好了。

这对我很有用

toolbar.setPadding(0,0,0,0);
toolbar.setContentInsetsAbsolute(0,0);