Android:从操作栏的自定义布局中删除左边距
我正在使用自定义的操作栏视图,正如您在下面的屏幕截图中所看到的,操作栏中有一个空白的空白区域。 我想删除它。
我做了什么:
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>
performance
<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>
主要活动
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的自定义视图不填充父项
我不知道该怎么办。
编辑(部分解决scheme):
不适用于Android <= API 10。
Android棒棒糖,AppCompat的ActionBar自定义视图不占用整个屏幕宽度
我改变了什么:
使用最新的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>
如果您要通过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" />
尝试这个:
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);
我在我的项目中使用了这个代码,祝你好运。
我发现了另一个解决scheme(参考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的contentInsetStart
引起的,默认是16dp。
将其更改为与angular线alignment。
更新支持库v24.0.0:
为了匹配材质devise规范,还有一个额外的属性contentInsetStartWithNavigation
,默认情况下是16dp。 如果您还有导航图标,请更改此项。
事实certificate,这是devise库版本24中引入的新材料devise规范的一部分。
https://material.google.com/patterns/navigation.html
但是,可以通过将以下属性添加到工具栏小部件来删除多余的空间。
app:contentInsetStartWithNavigation="0dp"
之前:
之后:
只需修改你的styles.xml
<!-- ActionBar styles --> <style name="MyActionBar" parent="Widget.AppCompat.ActionBar"> <item name="contentInsetStart">0dp</item> <item name="contentInsetEnd">0dp</item> </style>
<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">
这应该是够好的。
而不是在布局中添加工具栏,您可以设置您的自定义视图,如下所示。
Toolbar parent = (Toolbar) customView.getParent(); parent.setContentInsetsAbsolute(0,0);
使用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);
只添加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">
它看起来像这样
您需要在工具栏中添加这行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"/>
正确和最简单的答案是在另一篇文章,这是:
Android棒棒糖,AppCompat的ActionBar自定义视图不占用整个屏幕宽度
它被标记为正确的,并且在我尝试了之后,我可以确认它是有效的。
像这样创build工具栏:
<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的提示
只添加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">
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);
非常简单的方法,你可以删除工具栏左边的填充,请使用这种方式
<android.support.v7.widget.Toolbar xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="schemas.android.com/apk/res-auto" android:layout_width="match_parent" android:layout_height="wrap_content" android:background="@color/toolbar_color" android:layout_marginLeft="-20dp"/>
它看起来很酷,看图像
您可以在xml文件中使用工具栏视图组内的相对布局,并根据您的用例调整小部件的位置。无需创build自定义布局并使其膨胀并附加到工具栏。 一旦在你的java代码中完成,使用你的工具栏对象setContentInsetsAbsolute(0,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+应用程序仅支持actionbar machenism。 如果我们使用工具栏(支持lib v7),我们应该在每个活动的每个xml中进行布局,并注意在Android 5.0或更高版本的设备中与系统状态栏重叠的问题。
你的应用程序是否支持android 5? 如果不支持,则可以降级支持actionbar v7的版本。 这看起来像:
编译“com.android.support:appcompat-v7:19.0.+”(不要使用v7:21+)
也使目标版本的应用程序less于21。
targetSdkVersion 14
如果你的应用程序支持android 5 – >你将需要自定义的工具栏。 (因为appcombat-v7:21有一些变化)。