pokaż ikonę na pasku akcji / pasku narzędzi z AppCompat-v7 21

130

Próbowałem tych - ale nadal nie widzę ikony takiej jak wcześniej:

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

Wydaje się, że działa, gdy używam niestandardowego paska narzędzi - ale to zmusiłoby mnie do dotknięcia wszystkich układów - czy istnieje lepszy sposób na zrobienie tego?

ligi
źródło
1
Możesz dodać swoją klasę aktywności, gdzie dodałeś elementy paska akcji?
Harsha Vardhan

Odpowiedzi:

256
getSupportActionBar().setDisplayShowHomeEnabled(true);

wraz z

getSupportActionBar().setIcon(R.drawable.ic_launcher);
nadavfima
źródło
7
Uważaj, getSupportActionBar()może to nullzależeć od stylu Twojej aktywności.
jlhonora
2
nadal nie wyświetla się ikona. użyłem getSupportActionBar (). setDisplayHomeAsUpEnabled (true); getSupportActionBar (). setIcon (R.drawable.ic_app_icon); getSupportActionBar (). setTitle ("Etykieta");
Meenaxi
9
Dlaczego ikona wyświetla się na środku paska tytułu? Chcę Ikona po lewej stronie paska tytułu. Proszę o pomoc ... Dzięki
Mohammad Rajob
1
@Meenaxi powinieneś użyć setDisplayShowHomeEnabled (true); Ten
załatwił
1
Pamiętaj, że ustawienie ikony nie powoduje jej kliknięcia. Jeśli szukasz ikony, którą można kliknąć, musisz jej użyć .setHomeAsUpIndicatori obsługiwać w swoim onOptionsItemSelected.
Joshua Pinter
32

We współczesnych interfejsach użytkownika Androida programiści powinni bardziej polegać na wizualnie odmiennym schemacie kolorów pasków narzędzi niż na ikonie aplikacji. Używanie ikony aplikacji wraz z tytułem jako standardowego układu jest odradzane na urządzeniach z interfejsem API 21 i nowszych.

Jeśli się nie zgadzasz, możesz spróbować:

Aby utworzyć pasek narzędzi w 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" />

W Twojej działalności:

@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);
}

Użyj metody setLogo () , aby ustawić ikonę. Źródło kodu.

LordRaydenMK
źródło
1
Chcę tylko zaznaczyć, że obecnie SettingsAktywność Sklepu Play ma ikonę aplikacji na pasku akcji. To jest nadal dostępne po aktualizacji materiału.
Austyn Mahoney
17

To zadziałało dla mnie:

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

jak również:

    getSupportActionBar().setHomeButtonEnabled(true);
    getSupportActionBar().setDisplayShowHomeEnabled(true);
    getSupportActionBar().setIcon(R.drawable.ic_logo); //also displays wide logo
    getSupportActionBar().setDisplayShowTitleEnabled(false); //optional
Michał K.
źródło
jest wiele niepotrzebnych metod i niezwiązanych z ikoną
user924
15

najprostsza rzecz do zrobienia; poprostu dodaj:

app:navigationIcon="@drawable/ic_action_navigation_menu">

do <android.support.v7.widget.Toolbartagu

gdzie @drawable/ic_action_navigation_menujest nazwa ikony

Pila
źródło
1
Działa świetnie! To jest poprawny i najprostszy sposób dodania ikony nawigacji do paska narzędzi. Jeśli chcesz sprawdzić kliknięcia ikony nawigacji, możesz sprawdzić android.R.id.homeidentyfikator w pliku onOptionsItemSelected(...).
Sazid
12

Lepszy sposób na ustawienie wielu opcji:

setIcon/setLogozadziała tylko wtedy, gdy ustawiłeś DisplayOptions Spróbuj tego -

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

Możesz także ustawić opcje wyświetlania LOGO (wystarczy dodać stałą ActionBar.DISPLAY_USE_LOGO). Więcej informacji - displayOptions

Vintesh
źródło
6

Spróbuj użyć:

ActionBar ab = getSupportActionBar();
ab.setHomeButtonEnabled(true);
ab.setDisplayUseLogoEnabled(true);
ab.setLogo(R.drawable.ic_launcher);
Chris Banes
źródło
5
brzmiało obiecująco - ale nadal brak ikony :-(
ligi ligi
6

Dla paska akcji:

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

W przypadku paska narzędzi:

getSupportActionBar().setDisplayHomeAsUpEnabled(true);
getSupportActionBar().setHomeAsUpIndicator(R.drawable.ic_action_back);
Piotra Iwanowa
źródło
5
Nie ma różnicy między kodem 2 dla ActionBar i Toolbar, czy jest to zamierzone?
King King
1
Dla ActionBar powinno być: getActionBar (). SetDisplayHomeAsUpEnabled (true); getActionBar (). setHomeAsUpIndicator (R.drawable.ic_action_back);
Darsshan
To jest właściwie droga. Samo użycie setIconnie pozwala na kliknięcie przycisku, gdzie jak setHomeAsUpIndicatori obsługa tego onOptionsItemSelecteddziała. Dzięki!
Joshua Pinter
5

jeśli chcesz ustawić ikonę domu lub wstecz (nie logo lub ikonę statyczną), aby móc używać

 getSupportActionBar().setDisplayHomeAsUpEnabled(true);
 getSupportActionBar().setHomeAsUpIndicator( getResources().getDrawable(R.drawable.home) );
smoothumut
źródło
to jest poprawna odpowiedź, ponieważ rozmieść wygląd i zachowanie
cutiko
tylko to dało mi normalny wygląd (rozmiar, marginesy, przesunięcie między tytułem a ikoną), działa dobrze nawet z .xmlR.mipmap.ic_launcherR.mipmap.ic_launcher_round
programem
i użyłem tego jako logo / statycznej ikony, ponieważ inne rozwiązania działają brzydko
user924
4
getSupportActionBar().setDisplayShowHomeEnabled(true);
getSupportActionBar().setIcon(R.drawable.ic_launcher);

LUB spraw, aby układ XML wywołał rozszerzenietool_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>

Teraz w swojej głównej działalności dodaj tę linię

 <include
     android:id="@+id/tool_bar"
     layout="@layout/tool_bar" />
Skitty
źródło
3

Jeśli nie chcesz ustawiać paska narzędzi jako paska akcji za pomocą setSupportActionBar , możesz dodać logo obok ikony nawigacji (jeśli masz na przykład przycisk Wstecz) w następujący sposób:

toolbar.setLogo();

lub w formacie xml

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

Nawet jeśli masz tytuł ustawiony na pasku narzędzi, będzie on nadal wyświetlany.

Np. Zielony znaczek na poniższym obrazku to logo

Pasek narzędzi z ikoną nawigacji, logo i tytułem

Malek Hijazi
źródło
2

Spróbuj tego:

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);

dla ikony statycznej

Odilon Cenamo
źródło
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);
}
Hardik Vasani
źródło
0

W Xamarin.Android możesz użyć tych:

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

korzystanie z Android.Support.V7.App.AppCompatActivity jest wymagane.

Daniele D.
źródło
0

Spróbuj tego. U mnie to zadziałało

getSupportActionBar().setDisplayShowHomeEnabled(true);
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
getSupportActionBar().setDisplayUseLogoEnabled(true);
Matteo
źródło
0

W Kotlinie wykonałem następujące czynności, aby wyświetlić ikonę:

supportActionBar?.setDisplayShowHomeEnabled(true)
supportActionBar?.setIcon(R.drawable.ic_icon_small)
Leon
źródło