Кто-нибудь знает, как установить дополнение между значком дома 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'> Boat App </font>"));
Ответ 19
<string name="app_name">" "Brick Industry</string>
Просто добавьте " "
для имени вашего приложения
Это добавит пробел между значком и заголовком