在安卓工具栏图标中去除边距

27

在我的应用程序工具栏中,图标和导航图标之间出现了奇怪的边距(如图所示)。 我不知道它来自哪里以及如何将其去除。在搜索互联网后,我发现了这个:

<android.support.v7.widget.Toolbar
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:id="@+id/toolbar"
    android:layout_height="wrap_content"
    android:layout_width="match_parent"
    android:fitsSystemWindows="true"
    android:minHeight="?attr/actionBarSize"
    app:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar"
    android:background="?attr/colorPrimaryDark"
    android:layout_margin="0dp"
    android:contentInsetLeft="0dp"
    android:contentInsetRight="0dp"
    android:contentInsetStart="0dp"
    android:contentInsetEnd="0dp"
    android:padding="0dp"
    app:contentInsetLeft="0dp"
    app:contentInsetRight="0dp"
    app:contentInsetStart="0dp"
    app:contentInsetEnd="0dp">
</android.support.v7.widget.Toolbar>

但我仍然得到如图所示的边距: Margin

编辑 >> 解决方案

好的,在使用布局绑定后,我发现大部分的边距都是图标(如图)。但我还能否去掉这个边距并改变图标和标题文本的大小。 enter image description here

编辑

根据@Amir的解决方案: Java的辅助程序:

class BasicActivity extends AppCompatActivity{
    protected Toolbar mToolbar;    /// Initilize it in onCreate methode
    .....

     protected void setupToolbar(String title) {
        toolbar=(Toolbar) findViewById(R.id.toolbar);
        setSupportActionBar(toolbar);
        ActionBar ab = getSupportActionBar();
        if (ab != null) {
            ab.setDisplayHomeAsUpEnabled(true);
            ab.setDisplayShowHomeEnabled(true);
        }

       if (!TextUtils.isEmpty(title)) {
        setTitle(title);
    }
}

}

并且在你的活动类中:

class Main extends BasicActivity{
     @override
     protected void onCreate(Bundle saved){
          super.onCreate(saved);
          ....
          setupToolbar("MAIN");
     }
}

在您的工具栏中将 contentInsetStart 设置为零。 - Amir
contentInsetStart | contentInsetLeft | contentInsetEnd | contentInsetRightcontentInsetStart | contentInsetLeft | contentInsetEnd | contentInsetRight - Amir
我已经完成了那个。 - Anish Silwal
最简单的方法是打开布局边界,你就能发现它与你的主页图标或抽屉图标有关。 - Amir
请查看编辑,并提供一个答案。 - Anish Silwal
5个回答

60

您可以使用以下代码轻松地在标题和返回图标之间删除边距 | 填充

app:contentInsetStartWithNavigation="0dp"

边距 | 内边距 在工具栏左/右侧:

app:contentInsetStart="0dp"

如果您需要更多自定义,请按照以下方式进行操作:

<?xml version="1.0" encoding="utf-8"?>
<android.support.v7.widget.Toolbar xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:id="@+id/toolbar"
    android:layout_width="match_parent"
    android:layout_height="?attr/actionBarSize"
    android:background="@color/color_primary"
    app:contentInsetEnd="0dp"
    app:contentInsetLeft="0dp"
    app:contentInsetRight="0dp"
    app:contentInsetStart="0dp"
    app:popupTheme="@style/ThemeOverlay.AppCompat.Light">


    <RelativeLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:gravity="center_vertical">

        <ImageView
            android:id="@+id/icon_toolbar_left"
            style="@style/IconFont.Large"
            android:layout_width="48dp"
            android:layout_height="match_parent"
            android:layout_alignParentLeft="true"
            android:layout_alignParentStart="true"
            android:background="?attr/selectableItemBackground" />



        <TextView
            android:id="@+id/text_toolbar_title"
            style="@style/Textview.White.MediumSmall"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:layout_toLeftOf="@+id/icon_toolbar_right"
            android:layout_toRightOf="@+id/icon_toolbar_left"
            android:gravity="center"
            android:text="@string/nav_category"/>


        <ImageView
            android:id="@+id/icon_toolbar_right"
            style="@style/IconFont.Large"
            android:layout_width="48dp"
            android:layout_height="match_parent"
            android:layout_alignParentEnd="true"
            android:layout_alignParentRight="true"
            android:background="?attr/selectableItemBackground"/>

    </RelativeLayout>

</android.support.v7.widget.Toolbar>

1
只有一个问题,它会支持选项菜单吗? - Anish Silwal
@ASK 是的,它也被支持。 - Amir
我明白了,但现在我有另一个问题,如果我想设置标题和图标,我必须为每个活动声明函数,你能告诉我如何解决这个问题吗?(也许是如何创建扩展工具栏的自定义工具栏视图) - Anish Silwal
@ASK 创建一个BaseActivity类,继承自你的Activity并添加setToolbarTitlesetToolbarIcon以及其他方法,这样你就只需要传递标题和图标即可 :) - Amir
我已经根据您的方法编辑了我的问题并提供了解决方案。请检查一下,看看我是否正确或者请纠正我的错误。 - Anish Silwal

7

您可以通过修改主题和样式来调整边距,方法如下:

<style name="cusToolbarNavigationButtonStyle" parent="@style/Widget.AppCompat.Toolbar.Button.Navigation">
    <!--default is 56dp-->
    <item name="android:minWidth">0dp</item>  
    <item name="android:paddingLeft">16dp</item>
    <item name="android:paddingRight">16dp</item>
</style>

<style name="cusToolbarStyle" parent="@style/Widget.AppCompat.Toolbar">
    <!--default 4dp-->
    <item name="titleMargin">0dp</item> 
    <!--default @dimen/abc_action_bar_content_inset_with_nav-->
    <item name="contentInsetStartWithNavigation">0dp</item> 
</style>
<style name="AppTheme" parent="Theme.AppCompat.Light.NoActionBar">

    <item name="toolbarNavigationButtonStyle">@style/cusToolbarNavigationButtonStyle</item>
    <item name="toolbarStyle">@style/cusToolbarStyle</item>

</style>

1
如果您正在使用此代码
   <android.widget.Toolbar>
    android:contentInsetStart="0dp"
    android:contentInsetLeft="0dp"
</android.widget.Toolbar>

如果使用
    <androidx.appcompat.widget.Toolbar>

    app:contentInsetStart="0dp"
    app:contentInsetLeft="0dp"
</androidx.appcompat.widget.Toolbar>

0
如果您想从CollapsingToolbarLayout的标题中删除边距/填充,则可能会发现这很有用:
<android.support.design.widget.CollapsingToolbarLayout
    app:expandedTitleMarginStart="0dp"
    .../>

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接