Android:从操作栏的自定义布局中删除左边距

Zba*_*ian 249 xml android android-actionbar-compat

我正在使用自定义操作栏视图,如下面的屏幕截图所示,操作栏中有一个空白的灰色空间.我想删除它.

在此输入图像描述

我做了什么:

RES /值-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>
Run Code Online (Sandbox Code Playgroud)

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>
Run Code Online (Sandbox Code Playgroud)

表现

<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>
Run Code Online (Sandbox Code Playgroud)

主要活动

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);
}
Run Code Online (Sandbox Code Playgroud)

我发现了一篇最近的帖子,指出最新版本存在问题.我还将ADT和SDK更新到Android 5.

Android ActionBar的自定义视图未填充父级

我不知道该怎么办.

编辑(部分解决方案):

不适用于Android <= API 10.

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

我改变了什么:

使用最新的sdk版本:

<uses-sdk
        android:minSdkVersion="10"
        android:targetSdkVersion="21" />
Run Code Online (Sandbox Code Playgroud)

添加一个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>
Run Code Online (Sandbox Code Playgroud)

Luk*_*ner 574

如果要添加Toolbarvia XML,则只需添加XML属性即可删除内容插入.

<android.support.v7.widget.Toolbar
    xmlns:app="schemas.android.com/apk/res-auto"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:background="@color/primaryColor"
    android:contentInsetLeft="0dp"
    android:contentInsetStart="0dp"
    app:contentInsetLeft="0dp"
    app:contentInsetStart="0dp"
    android:contentInsetRight="0dp"
    android:contentInsetEnd="0dp"
    app:contentInsetRight="0dp"
    app:contentInsetEnd="0dp" />
Run Code Online (Sandbox Code Playgroud)

  • 在我的例子中,将此属性添加到`android.support.v7.widget.Toolbar`的设计xml中:`app:contentInsetStartWithNavigation ="0dp"`就足够了. (17认同)
  • 我使用“ app:contentInsetStart =“ 0dp”“及其工作方式 (6认同)
  • 使用"app:"和"android:"..有什么区别? (3认同)
  • 它们是不同的名称空间."android"命名空间传统上用于Android OS定义的所有属性."app"命名空间传统上用于由应用程序定义的属性,可以通过导入库,也可以在attrs.xml文件中添加自己的属性.请记住,名称空间"句柄"可以是您想要的名称,它是使用根布局上的xmlns属性定义的,或者在本例中是在布局元素本身中定义的.如果你愿意,你可以把它变成"xmlns:nougat".即在Android数据绑定中,我通常使用"bind"来绑定适配器. (3认同)
  • xmlns:app ="http://schemas.android.com/apk/res-auto"适用于缺少xml的'app'部分的所有人. (2认同)
  • 正如提到的 varotariyavajsi 和 computingfreak - 使用`app:contentInsetStartWithNavigation="0dp"` 或`app:contentInsetStart="0dp"` 就足够了,具体取决于您是否显示导航(抽屉或向上按钮)。它也适用于`androidx.appcompat.widget.Toolbar` (2认同)

小智 193

试试这个:

    ActionBar actionBar = getSupportActionBar();
    actionBar.setDisplayShowHomeEnabled(false);
    actionBar.setDisplayShowCustomEnabled(true);
    actionBar.setDisplayShowTitleEnabled(false);
    View customView = getLayoutInflater().inflate(R.layout.main_action_bar, null);
    actionBar.setCustomView(customView);
    Toolbar parent =(Toolbar) customView.getParent();
    parent.setPadding(0,0,0,0);//for tab otherwise give space in tab
    parent.setContentInsetsAbsolute(0,0);
Run Code Online (Sandbox Code Playgroud)

我在我的项目中使用了这段代码,祝你好运;

  • 不得不为平板电脑添加`parent.setPadding(0,0,0,0);` (11认同)
  • 这有效.但是,它可以稍微改变布局.或者,您可以执行`actionBar.setCustomView(R.layout.app_title_bar);``Toolbar parent =(Toolbar)actionBar.getCustomView().getParent();``parent.setContentInsetsAbsolute(0,0);`而不是膨胀布局. (7认同)
  • 优秀!parent.setContentInsetsAbsolute(0,0)就可以了! (3认同)

Nav*_*r M 40

左侧插图是由工具栏引起的contentInsetStart,默认情况下为16dp.

将其更改为与keyline对齐.

支持库v24.0.0的更新:

为匹配Material Design规范,还有一个附加属性contentInsetStartWithNavigation,默认为16dp.如果您还有导航图标,请更改此项.

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

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

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

app:contentInsetStartWithNavigation="0dp"
Run Code Online (Sandbox Code Playgroud)

之前: 在此输入图像描述

之后: 在此输入图像描述


mad*_*527 25

我找到了另一个更改toolbarStyle的解决方案(参考appcompat-v7),代码如下:

<item name="toolbarStyle">@style/Widget.Toolbar</item>


<style name="Widget.Toolbar" parent="@style/Widget.AppCompat.Toolbar">
<item name="contentInsetStart">0dp</item>
</style>
Run Code Online (Sandbox Code Playgroud)


kus*_*ush 23

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


Pra*_*ash 14

<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">
Run Code Online (Sandbox Code Playgroud)

这应该足够好了.


Nil*_*nta 10

只需修改styles.xml即可

<!-- ActionBar styles -->
    <style name="MyActionBar" parent="Widget.AppCompat.ActionBar">
        <item name="contentInsetStart">0dp</item>
        <item name="contentInsetEnd">0dp</item>
    </style>
Run Code Online (Sandbox Code Playgroud)


Raj*_*har 8

您可以设置自定义视图,而不是在布局中添加工具栏,如下所示.

Toolbar parent = (Toolbar) customView.getParent();
parent.setContentInsetsAbsolute(0,0);
Run Code Online (Sandbox Code Playgroud)


Key*_*ani 7

仅添加app:contentInsetStart="0dp"到工具栏中删除该左侧空间.

所以你的工具栏定义是这样的

 <android.support.v7.widget.Toolbar
    android:id="@+id/toolbar"
    android:layout_width="match_parent"
    app:contentInsetStart="0dp"
    android:layout_height="?attr/actionBarSize"
    android:background="?attr/colorPrimary"
    app:popupTheme="@style/ThemeOverlay.AppCompat.Light"
    app:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar">
Run Code Online (Sandbox Code Playgroud)

它看起来像这样

在此输入图像描述


sha*_*mar 6

如果你查看工具栏的文档,默认情况下它已经定义了样式,并且有一个项目 contentInsetStart。

<item name="contentInsetStart">16dp</item>
Run Code Online (Sandbox Code Playgroud)

如果您想覆盖此填充,可以通过两种方式完成。

1.覆盖样式并使用 contentInsetStart 和 contentInsetEnd 值添加您自己的样式

<style name="MyActionBar" parent="Widget.AppCompat.ActionBar">
    <item name="contentInsetStart">0dp</item>
    <item name="contentInsetEnd">0dp</item>
</style>
Run Code Online (Sandbox Code Playgroud)

2.在XML中您可以直接定义contentInsetStart和contentInsetEnd值

<androidx.appcompat.widget.Toolbar
    android:id="@+id/toolbar"
    android:layout_width="match_parent"
    app:contentInsetLeft="0dp"
    app:contentInsetStart="0dp"
    android:layout_height="?attr/actionBarSize">

    <!--Add your views here-->

</androidx.appcompat.widget.Toolbar>
Run Code Online (Sandbox Code Playgroud)


dea*_*ish 5

使用AppCompatAcitivty你可以使用

Toolbar mToolbar = (Toolbar) findViewById(R.id.toolbar);
View logo = getLayoutInflater().inflate(R.layout.custom_toolbar, null);
mToolbar.addView(logo, new ViewGroup.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.WRAP_CONTENT));
mToolbar.setContentInsetsAbsolute(0,0);
Run Code Online (Sandbox Code Playgroud)