Хтось знає, як встановити прокладки між домашньою піктограмою ActionBar та заголовком?
Хтось знає, як встановити прокладки між домашньою піктограмою ActionBar та заголовком?
Відповіді:
Я адаптував відповідь Cliffus і призначив малюнок логотипу в моєму визначенні стилю панелі дій, наприклад, такий у 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 '(тут зі значком запуску програми за замовчуванням) у res / dravable / 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 ви все ще можете встановити інший значок програми (піктограма запуску на "робочому столі". Будь-яке інше визначення логотипу тут видно в діяльності без панелі дій.
РЕДАКТУВАТИ : переконайтеся, що ви вказали цей параметр як LOGO , а не як значок програми, як це робили деякі з коментаторів.
Просто зробіть XML, який можна прочитати, і помістіть його в папку ресурсів "dravable" (без будь-якої щільності чи іншої конфігурації).
<?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.setTitle(" " + yourActivityTitle);
Якщо все, що вам потрібно, - це інтервал, це найпростіше рішення, про яке я міг придумати.
app:titleMarginStart
атрибута в макеті XML.
Ось так я зміг встановити прокладку між домашньою піктограмою та заголовком.
ImageView view = (ImageView)findViewById(android.R.id.home);
view.setPadding(left, top, right, bottom);
Я не зміг знайти спосіб налаштувати це за допомогою xml-стилів ActionBar. Тобто, наступний 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
padding
, він, здається, використовується marginEnd
з api 17 - що, ймовірно, порушить це рішення. Дивіться мою нижче
Це поширене питання в «Матеріал дизайну», оскільки ви, можливо, захочете узгодити заголовок панелі інструментів із вмістом у фрагменті нижче. Для цього ви можете змінити замінник "12dp" за замовчуванням, використовуючи атрибут contentInsetStart = "72dp" у вашій макеті панелі інструментів.xml, як показано нижче
панель інструментів.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");
І ви закінчуєте це:
app:titleMarginStart="dimension"
націлювання на назву безпосередньо.
contentInsetStart
розмістити пробіл між домашньою піктограмою та заголовком, відповідь могла б принаймні так сказати. На моєму тесті лише зараз contentInsetStart
здавалося, що це місце перед логотипом (що, правда, не те саме, що домашня ікона).
Для мене працювала лише наступна комбінація, протестована від 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>
Якщо ви використовуєте панель інструментів від 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"/>
Використання 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 для мене не працює через проблеми, які інші окреслили в коментарях, і хоча налаштування програмних накладок @dushyanth, можливо, працювало в минулому, я думаю, що факт, що інтервал - це тепер встановлено з використанням android:layout_marginEnd="8dip"
оскільки API 17 вручну, встановлення прокладки, не повинно мати ніякого ефекту. Перегляньте посилання, яке він опублікував до git, щоб перевірити його поточний стан.
Просте рішення для мене - встановити негативний запас на моєму власному режимі перегляду в панелі actionBar android:layout_marginLeft="-14dp"
. Швидкий тест показує, що він працює для мене на 2.3.3 та 4.3 з використаннямActionBarCompat
Сподіваюся, це комусь допоможе!
Я вирішив цю проблему за допомогою користувацького макета навігації
Використовуючи його, ви можете налаштувати будь-що в заголовку на панелі дій:
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 щодо налаштування прокладки програмно працювало для мене (налаштування накладки на значок додатка / логотипу). Я намагався знайти або android.R.id.home, або R.id.abs__home ( лише ActionBarSherlock , оскільки це забезпечує сумісність у зворотному напрямку), і, здається, він працює на 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);
Удачі!
Ви можете змінити dravableSize вашого 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 при зміні dravableSize (dravableSize = width = height). Але можна відступити зліва. Щоб відступити від права робити
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);
Ви також можете досягти цього методом:
Drawable d = new InsetDrawable(getDrawable(R.drawable.nav_icon),0,0,10,0);
mToolbar.setLogo(d);
У своєму 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
ця робота для мене, щоб додати прокладку до заголовка, а для ActionBar
значка я встановив це програмно.
getActionBar().setTitle(Html.fromHtml("<font color='#fffff'> Boat App </font>"));
<string name="app_name">" "Brick Industry</string>
Просто додайте " "
назву програми. Це додасть пробіл між піктограмою та заголовком