在ActionBar的主页图标和标题之间填充

有谁知道如何在ActionBar的主页图标和标题之间设置填充?

我调整了Cliffus的答案,并在我的actionbar样式定义中分配了可绘制的标识,例如res / style.xml中的样子:

<item name="android:actionBarStyle">@style/MyActionBar</item> <style name="MyActionBar" parent="@android:style/Widget.Holo.Light.ActionBar"> <item name="android:background">#3f51b5</item> <item name="android:titleTextStyle">@style/ActionBar.TitleText</item> <item name="android:textColor">#fff</item> <item name="android:textSize">18sp</item> <item name="android:logo">@drawable/actionbar_space_between_icon_and_title</item> </style> 

在res / drawable / actionbar_space_between_icon_and_title.xml中,drawable看起来像Cliffus的一个(这里是默认的应用程序启动器图标):

 <?xml version="1.0" encoding="utf-8"?> <layer-list xmlns:android="http://schemas.android.com/apk/res/android"> <item android:drawable="@drawable/ic_launcher" android:right="20dp"/> </layer-list> 

在android_manifest.xml中,你仍然可以设置一个不同的应用程序图标(桌面上的启动器图标)。这里的任何不同的标识定义在没有操作栏的活动中都是可见的。

编辑 :确保你把这个drawable设置为LOGO ,而不是像一些评论者那样做你的app图标。

只要制作一个可绘制的XML文件,并把它放在资源文件夹“drawable”(没有任何密度或其他configuration)。

 <?xml version="1.0" encoding="utf-8"?> <layer-list xmlns:android="http://schemas.android.com/apk/res/android" > <item android:drawable="@drawable/my_logo" android:right="10dp"/> </layer-list> 

最后一步是将这个新的drawable设置为清单中的徽标(或者在您的活动中的Actionbar对象上)

祝你好运!

我也面临类似的问题,在我的情况下,我必须根据内容dynamic地在每个活动上设置标题。

所以这为我工作。

 actionBar.setTitle(" " + yourActivityTitle); 

如果所有你想要的是间距,这是我能想到的最简单的解决scheme。

这是我能够设置主页图标和标题之间的填充。

 ImageView view = (ImageView)findViewById(android.R.id.home); view.setPadding(left, top, right, bottom); 

我找不到通过ActionBar xml样式自定义的方法。 也就是说,下面的XML不起作用:

 <style name="ActionBar" parent="android:style/Widget.Holo.Light.ActionBar"> <item name="android:titleTextStyle">@style/ActionBarTitle</item> <item name="android:icon">@drawable/ic_action_home</item> </style> <style name="ActionBarTitle" parent="android:style/TextAppearance.Holo.Widget.ActionBar.Title"> <item name="android:textSize">18sp</item> <item name="android:paddingLeft">12dp</item> <!-- Can't get this padding to work :( --> </style> 

但是,如果您希望通过xml实现这一点,这两个链接可能会帮助您find一个解决scheme:

https://github.com/android/platform_frameworks_base/blob/master/core/res/res/values/styles.xml

(这是用于在操作栏中显示主图标的实际布局) https://github.com/android/platform_frameworks_base/blob/master/core/res/res/layout/action_bar_home.xml

这是Material Design中的一个常见问题,因为您可能想要将工具栏标题与下面片段中的内容一致。 要做到这一点,你可以通过在你的toolbar.xml布局中使用属性contentInsetStart =“72dp”覆盖“12dp”的默认填充,如下所示

toolbar.xml

 <?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="wrap_content" android:background="@color/app_theme_color" app:contentInsetStart="72dp"/> 

然后在你的活动中,打电话

 Toolbar toolbar = (Toolbar) activity.findViewById(R.id.toolbar); toolbar.setTitle("Title Goes Here"); 

你最终得到这个:

工具栏

对于我来说,只有以下组合工作,从API 18至24testing

 app:contentInsetLeft="0dp" app:contentInsetStart="0dp" app:contentInsetStartWithNavigation="0dp" 

在“应用程序”中的位置是: xmlns:app="http://schemas.android.com/apk/res-auto"

例如。

  <android.support.v7.widget.Toolbar android:id="@+id/toolbar" android:layout_width="match_parent" android:layout_height="?attr/actionBarSize" android:background="@color/SE_Life_Green" app:contentInsetLeft="0dp" app:contentInsetStart="0dp" app:contentInsetStartWithNavigation="0dp" > ....... ....... ....... </android.support.v7.widget.Toolbar> 

如果从AppCompat(android.support.v7.widget.Toolbar,> = revision 24,2016年6月)使用工具栏,则图标和标题之间的填充可以使用以下值更改:

  app:contentInsetStartWithNavigation="0dp" 

为了改进我的答案,您可以直接在您的活动中使用它,或者您可以为您的工具栏创build一个新的布局文件。 在这种情况下,您只需在每个需要的视图上使用include属性导入工具栏的@id。

 <android.support.v7.widget.Toolbar android:id="@+id/toolbar" android:layout_width="match_parent" android:layout_height="?attr/actionBarSize" android:elevation="4dp" app:contentInsetLeft="0dp" app:contentInsetStart="0dp" app:contentInsetStartWithNavigation="0dp"> </android.support.v7.widget.Toolbar> 

然后,您可以将您的布局导入到您的activity.xml中

 <include layout="@layout/toolbar" android:layout_width="match_parent" android:layout_height="wrap_content"/> 

使用titleMarginStart为我工作。 Xamarin例子:

 <android.support.v7.widget.Toolbar xmlns:app="http://schemas.android.com/apk/res-auto" android:id="@+id/toolbar" android:layout_height="wrap_content" android:layout_width="match_parent" android:minHeight="?attr/actionBarSize" android:background="?attr/colorPrimary" app:titleMarginStart="24dp"/> 

像这样设置标志:

 mToolbar = FindViewById<SupportToolbar>(Resource.Id.toolbar); SetSupportActionBar(mToolbar); SupportActionBar.SetLogo(Resource.Drawable.titleicon32x32); SupportActionBar.SetDisplayShowHomeEnabled(true); SupportActionBar.SetDisplayUseLogoEnabled(true); SupportActionBar.Title = "App title"; 

我在标题之前使用了,并为我工作。

我使用自定义图像,而不是我的应用程序徽标右侧的默认标题文本。 这是以编程方式设置的

  actionBar.setDisplayHomeAsUpEnabled(true); actionBar.setDisplayUseLogoEnabled(true); actionBar.setCustomView(R.layout.include_ab_txt_logo); actionBar.setDisplayShowCustomEnabled(true); 

对于我的上述答案的问题是@ Cliffus的build议不起作用,因为其他人在评论中概述的问题,而@dushyanth programatic填充设置可能在过去工作,我会认为间距现在使用android:layout_marginEnd="8dip"设置,因为API 17手动设置填充应该没有效果。 查看他发布到git的链接以validation其当前状态。

对我来说一个简单的解决scheme是在android:layout_marginLeft="-14dp"自定义视图中设置一个负边距,就像android:layout_marginLeft="-14dp" 。 一个快速testing显示,它使用ActionBarCompat在2.3.3和4.3上适用于我

希望这可以帮助别人!

我通过使用自定义导航布局解决了这个问题

使用它你可以在操作栏的标题中自定义任何东西:

的build.gradle

 dependencies { compile 'com.android.support:appcompat-v7:21.0.+' ... } 

AndroidManifest.xml中

 <application android:icon="@drawable/ic_launcher" android:label="@string/app_name"> <activity android:name=".MainActivity" android:theme="@style/ThemeName"> <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity> </application> 

styles.xml

 <style name="ThemeName" parent="Theme.AppCompat.Light"> <item name="actionBarStyle">@style/ActionBar</item> <item name="android:actionBarStyle" tools:ignore="NewApi">@style/ActionBar</item> 
 <style name="ActionBar" parent="Widget.AppCompat.ActionBar"> <item name="displayOptions">showCustom</item> <item name="android:displayOptions" tools:ignore="NewApi">showCustom</item> <item name="customNavigationLayout">@layout/action_bar</item> <item name="android:customNavigationLayout" tools:ignore="NewApi">@layout/action_bar</item> <item name="background">@color/android:white</item> <item name="android:background">@color/android:white</item> 

action_bar.xml

 <?xml version="1.0" encoding="utf-8"?> <TextView xmlns:android="http://schemas.android.com/apk/res/android" android:id="@+id/action_bar_title" android:layout_width="wrap_content" android:layout_height="wrap_content" android:gravity="center_vertical" android:drawableLeft="@drawable/ic_launcher" android:drawablePadding="10dp" android:textSize="20sp" android:textColor="@android:color/black" android:text="@string/app_name"/> 

我有一个类似的问题,但行动栏中的上升和自定义应用程序图标/徽标之间的间距。 Dushyanth的设置填充的解决scheme编程方式为我工作(设置填充应用程序/标志图标)。 我试图findandroid.R.id.homeR.id.abs__homeActionBarSherlock只 ,因为这确保了向后兼容性),它似乎在我testing过的2.3-4.3设备上工作。

对于我的情况,这是与工具栏我解决它是这样的:

ic_toolbar_drawble.xml

 <layer-list xmlns:android="http://schemas.android.com/apk/res/android"> <item android:drawable="@drawable/ic_toolbar" android:right="-16dp" android:left="-16dp"/> </layer-list> 

在我的片段中,我检查了api:

 if (android.os.Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) toolbar.setLogo(R.drawable.ic_toolbar); else toolbar.setLogo(R.drawable.ic_toolbar_draweble); 

祝你好运!

你可以像这样改变DrawerArrow的drawableSize:

 <style name="MyTheme" parent="android:Theme.WithActionBar"> <item name="drawerArrowStyle">@style/DrawerArrowStyle</item> </style> <style name="DrawerArrowStyle" parent="Widget.AppCompat.DrawerArrowToggle"> <item name="barLength">24dp</item> <item name="arrowShaftLength">24dp</item> <item name="arrowHeadLength">10dp</item> <item name="drawableSize">42dp</item> //this is your answer </style> 

这是不正确的答案,因为在更改drawableSize(drawableSize = width = height)时,您不能select填充边和DrawerArrow图标缩放。 但是,你可以从左边缘。 从正确的边缘做

 findViewById(android.R.id.home).setPadding(10, 0, 5, 0); 

我用这个方法setContentInsetsAbsolute(int contentInsetLeft, int contentInsetRight) ,它的工作原理!

 int padding = getResources().getDimensionPixelSize(R.dimen.toolbar_content_insets); mToolbar.setContentInsetsAbsolute(padding, 0); 

当您使用自定义工具栏时,可以使用

 toolbar = (Toolbar) findViewById(R.id.toolbar); toolbar.setTitle(R.string.activity_title); setSupportActionBar(toolbar); getSupportActionBar().setLogo(R.drawable.logo); 

并在您的工具栏布局只需设置app:titleMarginStart="16dp"

请注意,您必须将图标设置为徽标,请勿使用getSupportActionBar().setIcon(R.drawable.logo)而应使用: getSupportActionBar().setLogo(R.drawable.logo)

我用AppBarLayout和自定义ImageButton做到这一点。

 <android.support.design.widget.AppBarLayout android:id="@+id/appbar" android:layout_width="match_parent" android:layout_height="wrap_content" app:elevation="0dp" android:background="@android:color/transparent" android:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar"> <RelativeLayout android:layout_width="match_parent" android:layout_height="match_parent"> <ImageView android:layout_width="32dp" android:layout_height="32dp" android:src="@drawable/selector_back_button" android:layout_centerVertical="true" android:layout_marginLeft="8dp" android:id="@+id/back_button"/> <android.support.v7.widget.Toolbar android:id="@+id/toolbar" android:layout_width="match_parent" android:layout_height="?attr/actionBarSize" app:popupTheme="@style/ThemeOverlay.AppCompat.Light"/> </RelativeLayout> </android.support.design.widget.AppBarLayout> 

我的Java代码:

 findViewById(R.id.appbar).bringToFront(); Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar); setSupportActionBar(toolbar); final ActionBar ab = getSupportActionBar(); getSupportActionBar().setDisplayShowTitleEnabled(false); 

这个工作为我添加填充的标题和ActionBar图标我已经设置编程。

  getActionBar().setTitle(Html.fromHtml("<font color='#fffff'>&nbsp;&nbsp;&nbsp;Boat App </font>")); 
 <string name="app_name">" "Brick Industry</string> 

只需为您的应用程序名称添加" "在图标和标题之间添加空格