Значок приложения не отображается на панели действий в android Lollipop и выше

Я просто перехожу из api 19 Kitkat в api 21 Lollipop. И теперь я обнаружил, что значок приложения отсутствует на панели действий. Я чувствую, что мое приложение выглядит совсем по-другому. Итак, есть ли способ показать значок приложения.

Ответы

Ответ 1

В разделе "Материал" (и на основе его версии 21 AppCompat 21) панель действий следует руководства по разработке материалов и использует Toolbar:

  • Заголовок и субтитры. Заголовок должен быть указателем для текущей позиции панели инструментов в иерархии навигации и содержащемся там содержимом. Подзаголовок, если он присутствует, должен указывать любую расширенную информацию о текущем контенте. Если приложение использует логотип, оно должно решительно отказаться от названия и субтитров.

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

Однако, если вы хотите использовать значок приложения, setLogo() - правильный метод.

Ответ 2

Я также хотел бы показать свою потрясающую иконку приложения в Lollipop +, поэтому вот что я использовал.

mActionBar.setDisplayShowHomeEnabled(true);
mActionBar.setIcon(Drawable); // Or drawable resource id.

Источник: ActionBar # setDisplayShowHomeEnabled (boolean)

Ответ 3

Это сработало для меня -

getSupportActionBar().setTitle("Title");
getSupportActionBar().setSubtitle("Subtitle");
getSupportActionBar().setHomeButtonEnabled(true); 
getSupportActionBar().setDisplayHomeAsUpEnabled(true); 

getSupportActionBar().setDisplayOptions(ActionBar.DISPLAY_SHOW_HOME | 
ActionBar.DISPLAY_SHOW_TITLE | ActionBar.DISPLAY_HOME_AS_UP | ActionBar.DISPLAY_USE_LOGO); // Customize if you need to

getSupportActionBar().setIcon(R.drawable.iconhere); // or setLogo

Важно, чтобы вы setDisplayOptions, поскольку setIcon/setLogo, похоже, не работает без него. Оригинальный ответ - значок приложения v.2 приложения app compat не отображается

Этот код работал на моем устройстве. Дайте мне знать, если у вас есть дополнительные вопросы.

Ответ 4

Вот как я это сделал:

package com.your.package;

import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;

public class MainActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        getSupportActionBar().setDisplayShowHomeEnabled(true);
        getSupportActionBar().setIcon(R.drawable.your_icon);
    }
}

Это даст вам следующее:

введите описание изображения здесь

Ответ 5

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

styles.xml

<!-- Base application theme. -->
    <style name="AppTheme" parent="AppTheme.Base">
        <!-- Customize your theme here. -->
    </style>

    <style name="AppTheme.Base" parent="Theme.AppCompat.Light.NoActionBar">
        <item name="colorPrimary">@color/colorPrimary</item>
        <item name="colorPrimaryDark">@color/colorPrimaryDark</item>
    </style>

v21\styles.xml

<resources>

    <style name="AppTheme" parent="AppTheme.Base">

        <item name="android:windowContentTransitions">true</item>
        <item name="android:windowAllowEnterTransitionOverlap">true</item>
        <item name="android:windowAllowReturnTransitionOverlap">true</item>
        <item name="android:windowSharedElementEnterTransition">@android:transition/move</item>
        <item name="android:windowSharedElementExitTransition">@android:transition/move</item>

        <item name="android:textColorPrimary">@color/textColorPrimary</item>
        <item name="android:windowBackground">@color/windowBackground</item>
        <item name="android:navigationBarColor">@color/navigationBarColor</item>

    </style>

</resources>

в вашем макете используйте панель инструментов, например:

<android.support.v4.widget.DrawerLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/drawer_layout"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:clickable="false"
    android:focusable="false"
    android:focusableInTouchMode="false">

    <RelativeLayout xmlns:tools="http://schemas.android.com/tools"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:background="@color/windowBackground">

        <android.support.v7.widget.Toolbar 
        android:id="@+id/toolbar"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:background="@color/colorPrimary"
        android:minHeight="?attr/actionBarSize"
        android:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar">

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



        <FrameLayout
            android:id="@+id/flContent"
            android:visibility="gone"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:layout_below="@id/toolbar">


        </FrameLayout>


    </RelativeLayout>



</android.support.v4.widget.DrawerLayout>

в вашем файле Java напишите ниже код для значка set:

toolbar = (Toolbar) findViewById(R.id.toolbar);


        if (toolbar != null) {

            setSupportActionBar(toolbar);

            toolbar.setNavigationIcon(R.drawable.icn_menu);
            //toolbar.setTitle("Title");
            setTitle("Title");
            //toolbar.setSubtitle("Subtitle");
            //toolbar.setLogo(R.drawable.ic_launcher);
        }

Ответ 6

Попробуйте следующее: -

getSupportActionBar.setDisplayHomeAsUpEnabled(true);