如何使用Android SDK API 21版(支持库)摆脱新工具栏中的额外填充?
我在谈论这张照片上的红色箭头:
以下是我正在使用的代码:
<android.support.v7.widget.Toolbar
android:id="@+id/toolbar"
android:layout_height="wrap_content"
android:layout_width="match_parent"
android:background="?attr/colorPrimary"
android:padding="0dp"
android:layout_margin="0dp">
<RelativeLayout
android:id="@+id/action_bar_layout"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_margin="0dp"
android:padding="0dp"
android:background="#000000">
<Spinner
android:layout_width="wrap_content"
android:layout_height="wrap_content"/>
</RelativeLayout>
</Toolbar>
正如您所看到的,我已将所有相关填充设置为0,但Spinner周围仍有填充。我做错了什么或者我需要做些什么才能摆脱额外的填充?
修改 有些人质疑我为什么要这样做。
根据Material Design规范,微调器应距离左侧72dp
我需要中和Google为了正确放置我的微调器而添加的填充:
修改2
根据Chris Bane的回答,我将contentInsetStart设置为0.对于支持库,您需要使用app命名空间:
<android.support.v4.widget.DrawerLayout
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="match_parent">
<android.support.v7.widget.Toolbar
android:id="@+id/toolbar"
android:layout_height="wrap_content"
android:layout_width="match_parent"
android:minHeight="@dimen/action_bar_height"
android:background="?attr/colorPrimary"
android:contentInsetStart="0dp"
android:contentInsetLeft="0dp"
app:contentInsetLeft="0dp"
app:contentInsetStart="0dp"
app:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar"
app:popupTheme="@style/ThemeOverlay.AppCompat.Light">
</android.support.v4.widget.DrawerLayout>
我希望这对某人有所帮助,让我困惑了几天。
答案 0 :(得分:263)
左侧插图是由工具栏的contentInsetStart
引起的,默认情况下为16dp。
将其更改为72dp以与keyline对齐。
支持库v24.0.0的更新:
为了匹配Material Design规范,还有一个额外的属性contentInsetStartWithNavigation
,默认情况下为16dp。如果您还有导航图标,请更改此项。
答案 1 :(得分:140)
以上答案是正确的,但仍有一件事可能会产生问题(至少它确实给我带来了问题)
我使用了以下内容,但它在旧设备上无法正常工作 -
android:contentInsetStart="0dp"
android:contentInsetLeft="0dp"
app:contentInsetLeft="0dp"
app:contentInsetStart="0dp"
这里的诀窍就是使用以下内容 -
app:contentInsetLeft="0dp"
app:contentInsetStart="0dp"
并摆脱 -
android:contentInsetStart="0dp"
android:contentInsetLeft="0dp"
现在它应该可以在所有设备上正常工作。
希望它有所帮助。
答案 2 :(得分:9)
如果其他人偶然发现...你也可以设置填充,例如:
Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
int padding = 200 // padding left and right
toolbar.setPadding(padding, toolbar.getPaddingTop(), padding, toolbar.getPaddingBottom());
或 contentInset :
toolbar.setContentInsetsAbsolute(toolbar.getContentInsetLeft(), 200);
答案 3 :(得分:9)
Simpley在工具栏中添加这两行。然后我们得到新的删除左侧空间bcoz默认为16dp。
android:contentInsetStart="0dp"
app:contentInsetStart="0dp"
答案 4 :(得分:3)
使您的工具栏像:
<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/menuToolbar"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_margin="0dp"
android:background="@color/white"
android:contentInsetLeft="10dp"
android:contentInsetRight="10dp"
android:contentInsetStart="10dp"
android:minHeight="?attr/actionBarSize"
android:padding="0dp"
app:contentInsetLeft="10dp"
app:contentInsetRight="10dp"
app:contentInsetStart="10dp"></android.support.v7.widget.Toolbar>
您需要添加
contentInset
添加间距的属性
请点击此链接了解更多信息 - Android Tips
答案 5 :(得分:3)
的组合
android:padding="0dp"
在工具栏的xml中
和
mToolbar.setContentInsetsAbsolute(0, 0)
在代码中
这对我有用。
答案 6 :(得分:2)
这就是我所做的,它适用于每个版本的Android。
<强> toolbar.xml 强>
<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="56dp"
android:background="@color/primary_color"
app:theme="@style/ThemeOverlay.AppCompat"
app:popupTheme="@style/ThemeOverlay.AppCompat.Light">
<TextView
android:id="@+id/toolbar_title"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_marginLeft="16dp" <!-- Add margin -->
android:layout_marginStart="16dp"
android:gravity="left|center"
android:text="Toolbar Title" <!-- Your title text -->
android:textColor="@color/white" <!-- Matches default title styles -->
android:textSize="20sp"
android:fontFamily="sans-serif-medium"/>
</android.support.v7.widget.Toolbar>
MyActivity.java (隐藏默认工具栏标题)
getSupportActionBar().setDisplayShowTitleEnabled(false); // Hide default toolbar title
显示Keylines的结果
答案 7 :(得分:1)
这适用于我的Android 7.11手机:
<!-- TOOLBAR -->
<android.support.v7.widget.Toolbar
android:id="@+id/toolbar"
android:layout_width="match_parent"
android:layout_height="wrap_content"
app:contentInsetStartWithNavigation="0dp">
<TextView
style="@style/TextAppearance.AppCompat.Widget.ActionBar.Title"
android:id="@+id/toolbar_title"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/create_account_title"
android:textColor="@color/color_dark_grey"/>
</android.support.v7.widget.Toolbar>
注意:我在padding = 0或contentInsetLeft = 0或contentInsetStart = 0
时绝对没有成功答案 8 :(得分:0)
好的,如果你需要72dp,你不能在xml文件中添加填充的差异吗?这样你就可以让Androids保持默认的Inset / Padding,他们希望我们使用它。
所以:72-16 = 56
因此:添加56dp填充,使自己的缩进/边距总计为72dp。
或者您可以只更改Dimen.xml文件中的值。 这就是我现在正在做的事情。它改变了一切,整个布局,包括以新的适当Android方式实现的工具栏。
我添加的链接显示了2dp的Dimen值,因为我更改了它,但默认设置为16dp。仅供参考......
答案 9 :(得分:-2)
((Toolbar)actionBar.getCustomView().getParent()).setContentInsetsAbsolute(0,0);