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

130

Я пробовал это, но все еще не вижу значок, как раньше:

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

Кажется, что это работает, когда я использую настраиваемую панель инструментов, но это заставит меня коснуться всех макетов - есть ли лучший способ сделать это?

Ligi
источник
1
Вы можете добавить свой класс активности, куда вы добавили элементы панели действий?
Харша Вардхан

Ответы:

256
getSupportActionBar().setDisplayShowHomeEnabled(true);

вместе с

getSupportActionBar().setIcon(R.drawable.ic_launcher);
nadavfima
источник
7
Помните, что это getSupportActionBar()может nullзависеть от стиля вашей деятельности.
jlhonora
2
все еще не отображается значок. я использовал getSupportActionBar (). setDisplayHomeAsUpEnabled (true); . getSupportActionBar () SetIcon (R.drawable.ic_app_icon); . getSupportActionBar () SetTitle ( "Метка");
Минакси
8
Почему значок отображается в середине строки заголовка? Я хочу значок слева от строки заголовка. Пожалуйста, помогите .. Спасибо
Мохаммад Рэйджоб
1
@Meenaxi вы должны использовать setDisplayShowHomeEnabled (true); Этот
сработал
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 (), чтобы установить значок. Исходный код.

LordRaydenMK
источник
1
Я просто хочу отметить, что в настоящее время у SettingsДействия в Play Store есть значок приложения на панели действий. Это все еще существует после обновления материалов.
Остин Махони
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имя значка

Pila
источник
1
Работает отлично! Это правильный и самый простой способ добавить значок навигации на панель инструментов. Если вы хотите проверить щелчки значка навигации, вы можете проверить android.R.id.homeидентификатор в своем onOptionsItemSelected(...).
Sazid
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

Vintesh
источник
6

Попробуйте использовать:

ActionBar ab = getSupportActionBar();
ab.setHomeButtonEnabled(true);
ab.setDisplayUseLogoEnabled(true);
ab.setLogo(R.drawable.ic_launcher);
Крис Бейнс
источник
5
звучит многообещающе - но все еще нет значка :-(
ligi
6

Для панели действий:

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

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

getSupportActionBar().setDisplayHomeAsUpEnabled(true);
getSupportActionBar().setHomeAsUpIndicator(R.drawable.ic_action_back);
Петр Иванов
источник
5
Нет разницы между двумя кодами для ActionBar и Toolbar, это намеренно?
King King
1
Для ActionBar должно быть: getActionBar (). SetDisplayHomeAsUpEnabled (true); . getActionBar () setHomeAsUpIndicator (R.drawable.ic_action_back);
Darsshan
На самом деле это правильный путь. Простое использование setIconне позволяет нажимать кнопку, тогда как setHomeAsUpIndicatorи обработка этого onOptionsItemSelectedработает. Спасибо!
Джошуа Пинтер
5

если вы хотите установить значок дома или назад (не логотип или статический значок), чтобы вы могли использовать

 getSupportActionBar().setDisplayHomeAsUpEnabled(true);
 getSupportActionBar().setHomeAsUpIndicator( getResources().getDrawable(R.drawable.home) );
smoothumut
источник
это правильный ответ, поскольку внешний вид и поведение развертывания
cutiko
только это дало мне нормальный внешний вид (размер, поля, смещение между заголовком и значком), работает нормально даже с векторной пусковой установкой ( .xml), например, R.mipmap.ic_launcherилиR.mipmap.ic_launcher_round
user924
и я использовал это как логотип / статический значок, потому что другие решения работают некрасиво
user924
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" />
Skitty
источник
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);
Matteo
источник
0

В Kotlin я сделал следующее, чтобы просто показать значок:

supportActionBar?.setDisplayShowHomeEnabled(true)
supportActionBar?.setIcon(R.drawable.ic_icon_small)
Леон
источник