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

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

enter image description here

我做了什么?

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's自定义视图不填充父项

我不知道该怎么办。

编辑(部分解决方案):

在Android <= API上不工作10。

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

我改变了什么:

使用最新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>
133352 次浏览

试试这个:

    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);

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

我发现了另一个决议(参考appcompat-v7),改变toolbarStyle,以下代码:

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




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

无需在布局中添加工具栏,您可以按照如下所示设置自定义视图。

Toolbar parent = (Toolbar) customView.getParent();
parent.setContentInsetsAbsolute(0,0);

只需修改您的styles.xml

<!-- ActionBar styles -->
<style name="MyActionBar" parent="Widget.AppCompat.ActionBar">
<item name="contentInsetStart">0dp</item>
<item name="contentInsetEnd">0dp</item>
</style>

如果你通过XML添加Toolbar,你可以简单地添加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" />

创建如下工具栏:

<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>

请按此链接了解更多- 安卓系统提示

只添加android:padding="0dp"对我有用

<android.support.v7.widget.Toolbar
xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
android:layout_height="60dp"
android:padding="0dp"
android:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar"
app:popupTheme="@style/ThemeOverlay.AppCompat.Light">
<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">

这应该足够好了。

使用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);
ActionBar ab = getSupportActionBar();
ab.setDisplayShowHomeEnabled(true);
ab.setDisplayShowCustomEnabled(true);
setDisplayShowTitleEnabled(true);
View customView =     getLayoutInflater().inflate(R.layout.activity_main,null); //here activity_main.xml is the GUI design file.
ab.setCustomView(customView);
Toolbar parent =(Toolbar) customView.getParent(); //use V7 Toolbar import
parent.setContentInsetsAbsolute(0, 0);
setPadding(5,0,0,0);


ab.setIcon(R.mipmap.ic_launcher);

您可以在xml文件中的工具栏视图组中使用相对布局,并根据您的用例调整小部件的位置。不需要创建自定义布局&膨胀它并附加到工具栏。一旦在你的java代码中完成,使用setContentInsetsAbsolute(0,0)与你的工具栏对象,然后在你的布局中将它设置为支持操作栏。

只需要将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">

它是这样的

enter image description here

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

<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或更高版本设备中的系统状态栏重叠的问题。

您需要在工具栏中添加这一行app2:contentInsetStart="0dp"

<android.support.v7.widget.Toolbar xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app2="http://schemas.android.com/apk/res-auto"
android:id="@+id/toolbar"
android:layout_width="match_parent"
android:layout_height="?attr/actionBarSize"
android:background="@color/colorPrimary"
app2:contentInsetStart="0dp"/>

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

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

支持库v24.0.0的更新:

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

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

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

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

app:contentInsetStartWithNavigation="0dp"

< >强: enter image description here < / p >

< >强后: enter image description here < / p >

芬兰湾的科特林

    supportActionBar?.displayOptions = ActionBar.DISPLAY_SHOW_CUSTOM;
supportActionBar?.setCustomView(R.layout.actionbar);


val parent = supportActionBar?.customView?.parent as Toolbar
parent?.setPadding(0, 0, 0, 0)//for tab otherwise give space in tab
parent?.setContentInsetsAbsolute(0, 0)

我在任何地方都没有找到我的问题(第一张图)的解决方案,但经过几个小时的挖掘,我最终得到了一个最简单的解决方案。请注意,我尝试了许多xml属性,如app:setInsetLeft="0dp"等。但在这件事上,没有一个能帮上忙。

< p >图片1 enter image description here < / p >

下面的代码解决了这个问题,如图2所示

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);


setContentView(R.layout.activity_main);


Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
setSupportActionBar(toolbar);




//NOTE THAT: THE PART SOLVED THE PROBLEM.
android.support.design.widget.AppBarLayout abl = (AppBarLayout)
findViewById(R.id.app_bar_main_app_bar_layout);


abl.setPadding(0,0,0,0);
}

图片2

enter image description here

这对我很有用

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

在工具栏中将“contentInset…”属性设置为0并不适合我。Nilesh Senta更新样式的解决方案起作用了!

styles.xml

<style name="AppTheme" parent="Theme.AppCompat.Light">
<!-- Customize your theme here. -->
<item name="colorPrimary">@color/colorPrimary</item>
<item name="colorPrimaryDark">@color/colorPrimaryDark</item>
<item name="colorAccent">@color/colorAccent</item>
<item name="actionBarStyle">@style/Actionbar</item>
<item name="android:titleTextStyle">@style/ActionbarTitle</item>
</style>


<style name="Actionbar" parent="Widget.AppCompat.ActionBar">
<item name="contentInsetStart">0dp</item>
<item name="contentInsetEnd">0dp</item>
</style>

java (onCreate)

ActionBar actionBar =  getSupportActionBar();


actionBar.setDisplayShowTitleEnabled(false);
actionBar.setDisplayHomeAsUpEnabled(false);
actionBar.setDisplayUseLogoEnabled(false);
actionBar.setDisplayShowCustomEnabled(true);


ActionBar.LayoutParams layoutParams = new ActionBar.LayoutParams(
ActionBar.LayoutParams.MATCH_PARENT,
ActionBar.LayoutParams.MATCH_PARENT
);


View view = LayoutInflater.from(this).inflate(R.layout.actionbar_main, null);


actionBar.setCustomView(view, layoutParams);

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

<item name="contentInsetStart">16dp</item>

如果你想覆盖这个填充,那么它可以通过两种方式完成。

1.重写样式并使用contentInsetStart和contentInsetEnd值添加自己的样式

<style name="MyActionBar" parent="Widget.AppCompat.ActionBar">
<item name="contentInsetStart">0dp</item>
<item name="contentInsetEnd">0dp</item>
</style>

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>

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

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

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

并在代码中添加这些行:

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

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