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

时间:2012-03-16 12:18:58

标签: android android-actionbar

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

22 个答案:

答案 0 :(得分:98)

编辑:请确保将此drawable设置为 LOGO ,而不是像某些评论者那样将您的应用图标设置为。

只需创建一个XML drawable并将其放在资源文件夹“drawable”中(没有任何密度或其他配置)。

<?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对象)

祝你好运!

答案 1 :(得分:68)

我修改了Cliffus的回答并在我的操作栏样式定义中分配了logo-drawable,例如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>

抽象看起来像Cliffus&#39; res / drawable / actionbar_space_between_icon_and_title.xml中的一个(这里有默认的应用启动器图标):

<?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中,您仍然可以设置不同的应用图标(桌面上的启动器图标&#39;。此处的任何不同徽标定义都可在没有操作栏的活动中看到。

答案 2 :(得分:50)

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

所以这对我有用。

actionBar.setTitle("  " + yourActivityTitle);

如果您只想要间距,这是我能想到的最简单的解决方案。

答案 3 :(得分:39)

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

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实现这一目标,这两个链接可能会帮助您找到解决方案:

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

答案 4 :(得分:30)

这是Material Design中的常见问题,因为您可能希望将工具栏标题与下面片段中的内容对齐。为此,您可以覆盖&#34; 12dp&#34;的默认填充。在toolbar.xml布局中使用属性 contentInsetStart =&#34; 72dp&#34; ,如下所示

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

你最终得到了这个:

Toolbar

答案 5 :(得分:29)

对我来说,只有以下组合有效,从API 18到24进行了测试

inputstring.split('_')

“app”中的位置为:app:contentInsetLeft="0dp" app:contentInsetStart="0dp" app:contentInsetStartWithNavigation="0dp"

例如。

xmlns:app="http://schemas.android.com/apk/res-auto"

答案 6 :(得分:27)

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

  app:contentInsetStartWithNavigation="0dp"

要改进我的答案,您可以直接在活动中的工具栏上使用它,也可以为工具栏创建新的布局文件。在这种情况下,您只需在每个所需视图上使用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"/>

答案 7 :(得分:5)

使用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";

答案 8 :(得分:4)

我在标题前使用了\ t并为我工作。

答案 9 :(得分:1)

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

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

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

对我来说,一个简单的解决方案是在actionBar中的自定义视图上设置负边距,就像android:layout_marginLeft="-14dp"一样。快速测试表明它使用ActionBarCompat

在2.3.3和4.3上适用于我

希望这有助于某人!

答案 10 :(得分:1)

我使用自定义导航布局

解决了这个问题

使用它可以在操作栏上自定义标题中的任何内容:

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

答案 11 :(得分:0)

只包括:

    app:titleMargin="10dp"

在您的 xml 文件中,例如:

    <androidx.appcompat.widget.Toolbar
    android:id="@+id/tbrMain"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    app:titleMargin="10dp"
    android:minHeight="?attr/actionBarSize"
    android:theme="?attr/actionBarTheme" />

答案 12 :(得分:0)

在XML中,如下所示在工具栏视图中设置app:titleMargin

<androidx.appcompat.widget.Toolbar
            android:id="@+id/toolbar"
            android:layout_width="match_parent"
            android:layout_height="?attr/actionBarSize"
            app:titleMarginStart="16dp"/>

或者在您的代码中:

toolbar.setTitleMargin(16,16,16,16); // start, top, end, bottom

答案 13 :(得分:0)

您也可以通过方法来实现相同目的:

Drawable d = new InsetDrawable(getDrawable(R.drawable.nav_icon),0,0,10,0);
mToolbar.setLogo(d);

答案 14 :(得分:0)

我使用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);

答案 15 :(得分: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)

答案 16 :(得分:0)

我使用了这种方法setContentInsetsAbsolute(int contentInsetLeft, int contentInsetRight)并且它有效!

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

答案 17 :(得分:0)

您可以像这样更改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)时,您无法选择填充边和DrawerArrow图标缩放。但你可以从左边开始。从右边做边距

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

答案 18 :(得分:0)

对于我的情况,使用工具栏我解决了这个问题:

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);
祝你好运!

答案 19 :(得分:0)

我遇到了类似的问题,但在操作栏中的向上和自定义应用图标/徽标之间有间距。 Dushyanth设置填充的解决方案以编程方式为我工作(在app / logo图标上设置填充)。我试图找到 android.R.id.home R.id.abs__home 仅限ActionBarSherlock ,因为这可以确保向后兼容性),它似乎适用于我测试过的2.3-4.3设备。

答案 20 :(得分:-2)

<string name="app_name">"    "Brick Industry</string>

只需为您的应用名称添加" "即可 它会在图标和标题之间添加空格

答案 21 :(得分:-2)

这项工作让我为标题添加了填充,而ActionBar图标我已经以编程方式设置了它。

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