показати значок на панелі дій / панелі інструментів за допомогою AppCompat-v7 21


130

Я спробував це - але все ще не бачу піктограми, як раніше:

getSupportActionBar().setLogo(R.drawable.ic_launcher);
getSupportActionBar().setDisplayUseLogoEnabled(true);
getSupportActionBar().setIcon(R.drawable.ic_launcher);

Здається, це працює, коли я використовую власну панель інструментів - але це змусить мене торкнутися всіх макетів - чи є кращий спосіб зробити це?


1
Ви можете додати свій клас активності, де ви додали речі в рядку дій?
Харша Вардхан

Відповіді:


256
getSupportActionBar().setDisplayShowHomeEnabled(true);

разом з

getSupportActionBar().setIcon(R.drawable.ic_launcher);

7
Остерігайтеся, що це getSupportActionBar()може nullзалежати від стилю вашої діяльності.
jlhonora

2
усе ще не відображається значок. я використав getSupportActionBar (). setDisplayHomeAsUpEnabled (true); getSupportActionBar (). setIcon (R.dravable.ic_app_icon); getSupportActionBar (). setTitle ("Мітка");
Meenaxi

8
Чому значок відображається посеред рядка заголовка? Я хочу піктограму зліва від заголовка. Будь ласка, допоможіть .. Дякую
Мохаммед Райоб

1
@Meenaxi слід використовувати setDisplayShowHomeEnabled (вірно); Той зробив для мене трюк
arniotaki

1
Зауважте, що встановлення піктограми не робить її простою. Якщо ви шукаєте значок, який можна натиснути, вам потрібно використовувати його .setHomeAsUpIndicatorта обробляти його у вашому onOptionsItemSelected.
Джошуа Пінтер

32

У сучасних інтерфейсах Android розробники повинні більше спиратися на візуально чітку кольорову гаму панелей інструментів, ніж на піктограму їх додатків. Використання піктограми додатка плюс заголовка в якості стандартного макета не рекомендується використовувати на пристроях API 21 і новіших версіях.

Якщо ви не згодні, ви можете спробувати:

Щоб створити панель інструментів у XML:

<android.support.v7.widget.Toolbar  
    android:id="@+id/my_awesome_toolbar"
    android:layout_height="wrap_content"
    android:layout_width="match_parent"
    android:minHeight="?attr/actionBarSize"
    android:background="?attr/colorPrimary" />

У вашій діяльності:

@Override
public void onCreate(Bundle savedInstanceState) {  
    super.onCreate(savedInstanceState);
    setContentView(R.layout.my_layout);

    Toolbar toolbar = (Toolbar) findViewById(R.id.my_awesome_toolbar);
    setSupportActionBar(toolbar);
}

Використовуйте метод setLogo () для встановлення значка. Джерело коду.


1
Я просто хочу зазначити, що на даний момент у Play Store SettingsActivity є значок програми на панелі дій. Це все ще є після оновлення матеріалу.
Остін Махоні

17

Це працювало для мене:

    getSupportActionBar().setHomeButtonEnabled(true);
    getSupportActionBar().setDisplayShowHomeEnabled(true);
    getSupportActionBar().setDisplayUseLogoEnabled(true);
    getSupportActionBar().setLogo(R.drawable.ic_logo);
    getSupportActionBar().setDisplayShowTitleEnabled(false); //optional

так само, як:

    getSupportActionBar().setHomeButtonEnabled(true);
    getSupportActionBar().setDisplayShowHomeEnabled(true);
    getSupportActionBar().setIcon(R.drawable.ic_logo); //also displays wide logo
    getSupportActionBar().setDisplayShowTitleEnabled(false); //optional

є багато непотрібних методів і не пов’язаних із значком
user924

15

найпростіша річ; просто додайте:

app:navigationIcon="@drawable/ic_action_navigation_menu">

до <android.support.v7.widget.Toolbarтегу

де @drawable/ic_action_navigation_menuназва піктограми


1
Працює чудово! Це правильний і найпростіший спосіб додати значок навігації на панелі інструментів. Якщо ви хочете перевірити наявність клавіш навігації, ви можете перевірити наявність android.R.id.homeідентифікатора у вашому onOptionsItemSelected(...).
Сазід

12

Кращий спосіб встановлення кількох варіантів:

setIcon/setLogoметод буде працювати, лише якщо ви встановили DisplayOptions. Спробуйте це -

actionBar.setDisplayOptions(ActionBar.DISPLAY_SHOW_HOME | ActionBar.DISPLAY_SHOW_TITLE);
actionBar.setIcon(R.drawable.ic_launcher);

Ви також можете встановити параметри відображення LOGO (просто додайте константу ActionBar.DISPLAY_USE_LOGO). Більше інформації - displayOptions


6

Спробуйте скористатися:

ActionBar ab = getSupportActionBar();
ab.setHomeButtonEnabled(true);
ab.setDisplayUseLogoEnabled(true);
ab.setLogo(R.drawable.ic_launcher);

5
звучало багатообіцяюче, але все ще немає Ікона :-(
ligi

5

якщо ви хочете встановити домашню або задню піктограму (не логотип чи статичний значок), щоб ви могли використовувати

 getSupportActionBar().setDisplayHomeAsUpEnabled(true);
 getSupportActionBar().setHomeAsUpIndicator( getResources().getDrawable(R.drawable.home) );

це правильна відповідь, оскільки розгорнути зовнішній вигляд та поведінку
cutiko

тільки це дало мені нормальний вигляд (розмір, поля, зміщення між заголовком та піктограмою), працює нормально навіть із .xmlR.mipmap.ic_launcherR.mipmap.ic_launcher_round
запуском

і я використав це як логотип / статичний значок, оскільки інші рішення працюють некрасиво
user924

5

Для панелі дій:

getActionBar().setDisplayHomeAsUpEnabled(true);
getActionBar().setHomeAsUpIndicator(R.drawable.ic_action_back);

Для панелі інструментів:

getSupportActionBar().setDisplayHomeAsUpEnabled(true);
getSupportActionBar().setHomeAsUpIndicator(R.drawable.ic_action_back);

5
Немає різниці між двома кодами для ActionBar та панелі інструментів, це навмисно?
Король-король

1
Для ActionBar повинно бути: getActionBar (). SetDisplayHomeAsUpEnabled (true); getActionBar (). setHomeAsUpIndicator (R.dravable.ic washing_back);
Дарсшан

Це насправді шлях. Просто використання setIconне дозволяє натискати кнопку, де можна звертатись із тим, setHomeAsUpIndicatorщо onOptionsItemSelectedпрацює у пригоді. Дякую!
Джошуа Пінтер

4
getSupportActionBar().setDisplayShowHomeEnabled(true);
getSupportActionBar().setIcon(R.drawable.ic_launcher);

АБО зробіть макет XML викликомtool_bar.xml

<?xml version="1.0" encoding="utf-8"?>
<android.support.v7.widget.Toolbar xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:background="@color/colorPrimary"
    android:theme="@style/ThemeOverlay.AppCompat.Dark"
    android:elevation="4dp">

    <RelativeLayout
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:orientation="horizontal">

    <ImageButton
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:background="@color/colorPrimary"
        android:src="@drawable/ic_action_search"/>

    </RelativeLayout>
</android.support.v7.widget.Toolbar>

Тепер у вашій основній діяльності додайте цей рядок

 <include
     android:id="@+id/tool_bar"
     layout="@layout/tool_bar" />

3

Якщо ви не хочете встановити панель інструментів як панель дій, використовуючи setSupportActionBar , ви можете додати логотип поруч із значком навігації (якщо у вас є кнопка назад, наприклад):

toolbar.setLogo();

або в xml

<android.support.v7.widget.Toolbar 
    ....
    android:logo="@drawable/logo"
    app:logo="@drawable/logo"/>

І навіть якщо на панелі інструментів встановлено заголовок, заголовок все одно відображатиметься.

Наприклад: Зелена галочка на зображенні нижче - логотип

Панель інструментів з піктограмою, логотипом та заголовком навігації


2

Спробуйте це:

import android.support.v7.app.ActionBar;
import android.support.v7.app.AppCompatActivity;
...
    ActionBar actionbar = getSupportActionBar();
    actionbar.setDisplayHomeAsUpEnabled(true);
    actionbar.setHomeAsUpIndicator(R.drawable.ic_launcher);

so your icon will be used for Home / back
or

import android.support.v7.app.ActionBar;
import android.support.v7.app.AppCompatActivity;
...
    ActionBar actionbar = getSupportActionBar();
    actionbar.setDisplayShowHomeEnabled(true);
    actionbar.setIcon(R.drawable.ic_launcher);

для статичної піктограми


1
toolbar.setLogo(resize(logo, (int) Float.parseFloat(mContext.getResources().getDimension(R.dimen._120sdp) + ""), (int) Float.parseFloat(mContext.getResources().getDimension(R.dimen._35sdp) + "")));


public Drawable resize(Drawable image, int width, int height)
{
    Bitmap b = ((BitmapDrawable) image).getBitmap();
    Bitmap bitmapResized = Bitmap.createScaledBitmap(b, width, height, false);
    return new BitmapDrawable(getResources(), bitmapResized);
}

0

У Xamarin.Android ви можете використовувати такі:

SupportActionBar.SetHomeButtonEnabled(true);
SupportActionBar.SetDisplayShowHomeEnabled(true);
SupportActionBar.SetDisplayUseLogoEnabled(true);
SupportActionBar.SetIcon(Resource.Drawable.ic_launcher);
SupportActionBar.SetDisplayShowTitleEnabled(false);

за допомогою Android.Support.V7.App.AppCompatActivity потрібно.


0

Спробуйте це. Для мене це спрацювало

getSupportActionBar().setDisplayShowHomeEnabled(true);
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
getSupportActionBar().setDisplayUseLogoEnabled(true);

0

У Котліні я зробив наступне, щоб просто показати піктограму:

supportActionBar?.setDisplayShowHomeEnabled(true)
supportActionBar?.setIcon(R.drawable.ic_icon_small)
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.