Заполнение между иконкой и заголовком ActionBar

Кто-нибудь знает, как установить дополнение между значком дома ActionBar и заголовком?

Ответ 1

Я адаптировал ответ Клиффуса и назначил логотип, который можно извлечь в моем определении стиля панели действий, например, в 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 'one (здесь с иконкой запуска приложения по умолчанию) в 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 вы можете установить другой значок приложения (значок запуска на рабочем столе). Любое другое определение логотипа здесь видно в действиях без панели действий.

Ответ 2

РЕДАКТИРОВАТЬ: установите этот шаблон как ЛОГОС, а не как значок вашего приложения, как это сделали некоторые из комментаторов.

Просто создайте XML-чертеж и поместите его в папку ресурсов "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>

Последний шаг заключается в том, чтобы установить этот новый шаблон в качестве логотипа в вашем манифесте (или в объекте Actionbar в вашей деятельности).

Удачи!

Ответ 3

Я также столкнулся с подобной проблемой, в моем случае мне пришлось динамически устанавливать титры на каждое действие в зависимости от содержимого.

Итак, это сработало для меня.

actionBar.setTitle("  " + yourActivityTitle);

Если все, что вы хотите - это интервал, это самое простое решение, о котором я мог подумать.

Ответ 4

Вот как я смог установить прописку между домашним значком и заголовком.

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

Ответ 5

Это общий вопрос в Material Design, так как вы можете поместить заголовок панели инструментов с содержимым фрагмента ниже. Для этого вы можете переопределить заполнение по умолчанию "12dp" ​​с помощью атрибута contentInsetStart = "72dp" в вашем макете toolbar.xml, как показано ниже

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

И вы закончите с этим:

Панель инструментов

Ответ 6

Для меня работала только следующая комбинация, проверенная от API 18 до 24

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>

Ответ 7

Если вы используете панель инструментов из AppCompat (android.support.v7.widget.Toolbar, >= редакция 24, июнь 2016 года), дополнение между значком и заголовком может быть изменено со следующим значением:

  app:contentInsetStartWithNavigation="0dp"

Чтобы улучшить мой ответ, вы можете использовать его на панели инструментов непосредственно внутри своей деятельности или создать новый файл макета для своей панели инструментов. В этом случае вам просто нужно импортировать панель инструментов @id с помощью свойства include для каждого необходимого вида.

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

Ответ 8

Использование 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";

Ответ 9

Я использовал \t перед заголовком и работал у меня.

Ответ 10

Я использую настраиваемое изображение вместо текста заголовка по умолчанию справа от логотипа моих приложений. Это программируется так, как

    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". Быстрый тест показывает, что он работает для меня на 2.3.3 и 4.3, используя ActionBarCompat

Надеюсь, это поможет кому-то!

Ответ 11

Я решил эту проблему, используя пользовательский макет навигации

Используя его, вы можете настроить что-либо в заголовке на панели действий:

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

Ответ 12

У меня была аналогичная проблема, но с интервалом между значком и логотипом пользовательского приложения в панели действий. Dushyanth решение настройки дополнения было запрограммировано для меня (установка прописной буквы на значок приложения/логотипа). Я попытался найти android.R.id.home или R.id.abs__home ( ActionBarSherlock only, поскольку это обеспечивает обратную совместимость), и, похоже, он работает через 2,3-4,3 устройства, на которых я тестировал.

Ответ 13

В моем случае именно с панелью инструментов я решил это следующим образом:

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

Удачи!

Ответ 14

Вы можете изменить drawableSize вашего DrawerArrow следующим образом:

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

Это неверный ответ, потому что вы не можете выбрать размер прокладки и масштабирование значка DrawerArrow при изменении drawableSize (drawableSize = width = height). Но вы можете оставлять слева.

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

Ответ 15

Я использовал этот метод setContentInsetsAbsolute(int contentInsetLeft, int contentInsetRight), и он работает!

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

Ответ 16

Когда вы используете пользовательскую панель инструментов, вы можете использовать

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)

Ответ 17

Я использовал 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);

Ответ 18

эта работа для меня, чтобы добавить дополнение к заголовку, а для значка ActionBar я установил это программно.

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

Ответ 19

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

Просто добавьте " " для имени вашего приложения Это добавит пробел между значком и заголовком