我正在使用自定义操作栏视图,正如您在下面的屏幕截图中看到的那样,操作栏中有一个空白的灰色空间。我想删除它。
我做了什么:
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>
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 custom view not filling parent
我不知道该怎么做。
编辑(部分解决方案):
不适用于Android&lt; = API 10。
Android Lollipop, AppCompat ActionBar custom view doesn't take up whole screen width
我改变了什么:
使用最新的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>
答案 0 :(得分:514)
如果要通过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" />
答案 1 :(得分:190)
试试这个:
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);
我在项目中使用了这段代码,祝你好运;
答案 2 :(得分:35)
左侧插图是由工具栏的contentInsetStart
引起的,默认情况下为16dp。
将其更改为与keyline对齐。
支持库v24.0.0的更新:
为了匹配Material Design规范,还有一个额外的属性contentInsetStartWithNavigation
,默认情况下为16dp。如果您还有导航图标,请更改此项。
事实证明,这是设计库第24版中引入的新材料设计规范的一部分。
https://material.google.com/patterns/navigation.html
但是,可以通过向Toolbar小部件添加以下属性来删除额外空间。
app:contentInsetStartWithNavigation="0dp"
答案 3 :(得分:24)
我找到了另一个更改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>
答案 4 :(得分:13)
<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">
这应该足够好了。
答案 5 :(得分:8)
只需修改styles.xml
即可<!-- ActionBar styles -->
<style name="MyActionBar" parent="Widget.AppCompat.ActionBar">
<item name="contentInsetStart">0dp</item>
<item name="contentInsetEnd">0dp</item>
</style>
答案 6 :(得分:7)
您可以设置自定义视图,而不是在布局中添加工具栏。
Toolbar parent = (Toolbar) customView.getParent();
parent.setContentInsetsAbsolute(0,0);
答案 7 :(得分:6)
仅将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">
看起来像这样
答案 8 :(得分:3)
如果您查看工具栏的文档,则默认情况下它具有定义的样式,并且有一个项目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>
答案 9 :(得分:3)
使用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);
,您只能使用
{{1}}
答案 10 :(得分:3)
你需要添加这一行app2:contentInsetStart =&#34; 0dp&#34;在工具栏中
<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"/>
答案 11 :(得分:1)
只需将app:contentInsetStart="0dp"
添加到工具栏的XML属性即可。
答案 12 :(得分:1)
我没有在任何地方找到我的问题(第一张图片)的解决方案,但最后我在经过几个小时的挖掘后得到了最简单的解决方案。请注意,我尝试了许多xml属性,如app:setInsetLeft="0dp"
等。但在这种情况下,它们都没有帮助。
以下代码解决了这个问题,如图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
答案 13 :(得分:0)
您可以在xml文件中的工具栏视图组中使用相对布局,并根据您的用例需要调整窗口小部件的位置。无需创建自定义布局&amp;给它充气并附加到工具栏上。完成java代码后,在工具栏对象中使用setContentInsetsAbsolute(0,0),然后再将其设置为布局中的支持操作栏。
答案 14 :(得分:0)
最好将背景项添加到应用操作栏的样式中,以与自定义操作栏的背景颜色一致:
<item name="android:background">@color/actionbar_bgcolor</item>
在android 6.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+应用程序后支持动作栏machenism。如果我们使用工具栏(支持lib v7),我们应该在每个活动的每个xml中布局它,并处理Android 5.0或更高版本设备中与系统状态栏重叠的问题。
答案 15 :(得分: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);
答案 16 :(得分:0)
仅为我添加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">
答案 17 :(得分:0)
科特林
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)
答案 18 :(得分:0)
答案 19 :(得分:0)
这对我有用
toolbar.setPadding(0,0,0,0);
toolbar.setContentInsetsAbsolute(0,0);
答案 20 :(得分: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);
答案 21 :(得分:0)
正确和最简单的答案是另一篇文章:
<强> Android Lollipop, AppCompat ActionBar custom view doesn't take up whole screen width 强>
它标记为正确,在我尝试之后,我可以确认它有效。
答案 22 :(得分:-1)
你的应用支持android 5吗? 如果不支持,那么您可以降级支持操作栏v7的版本。 它看起来像:
编译'com.android.support:appcompat-v7:19.0.+' (不要使用v7:21 +)
也使应用程序的目标版本低于21。
targetSdkVersion 14
如果您的应用支持android 5 - &gt;你需要自定义ToolBar。 (因为appcombat-v7:21有一些变化)。