mostre o ícone na barra de ação / barra de ferramentas com AppCompat-v7 21

130

Eu tentei estes - mas ainda não vejo o ícone como antes:

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

Parece funcionar quando eu uso a barra de ferramentas personalizada - mas isso me forçaria a tocar em todos os layouts - existe uma maneira melhor de fazer isso?

ligi
fonte
1
Você pode adicionar sua classe de atividade, onde adicionou itens da barra de ação?
Harsha Vardhan

Respostas:

256
getSupportActionBar().setDisplayShowHomeEnabled(true);

junto com

getSupportActionBar().setIcon(R.drawable.ic_launcher);
nadavfima
fonte
7
Cuidado que getSupportActionBar()pode nulldepender do estilo da sua atividade.
Jlhonora # 15/15
2
ainda não está mostrando o ícone. eu usei getSupportActionBar (). setDisplayHomeAsUpEnabled (true); getSupportActionBar (). setIcon (R.drawable.ic_app_icon); getSupportActionBar (). setTitle ("Label");
Meenaxi 30/03
8
Por que o ícone aparece no meio da barra de título? Eu quero o ícone do lado esquerdo da barra de título. Por favor ajude .. Obrigado
Mohammad Rajob
1
@Meenaxi você deve usar setDisplayShowHomeEnabled (true); Que um fez o truque para mim
arniotaki
1
Observe que a configuração do ícone não o torna clicável. Se você estiver procurando por um ícone clicável, precisará usá .setHomeAsUpIndicator-lo e manipulá-lo no seu onOptionsItemSelected.
21719 Joshua Pinter
32

Nas modernas UIs do Android, os desenvolvedores devem se apoiar mais em um esquema de cores visualmente distinto para as barras de ferramentas do que no ícone do aplicativo. O uso do ícone do aplicativo e do título como um layout padrão é desencorajado em dispositivos API 21 e mais recentes.

Se você não concorda, pode tentar:

Para criar a barra de ferramentas em 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" />

Na sua atividade:

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

Use o método setLogo () para definir o ícone. Código fonte.

LordRaydenMK
fonte
1
Eu só quero ressaltar que atualmente a SettingsAtividade da Play Store tem o ícone do aplicativo na barra de ação. Isso ainda existe após a atualização do material.
Austyn Mahoney
17

Isso funcionou para mim:

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

assim como:

    getSupportActionBar().setHomeButtonEnabled(true);
    getSupportActionBar().setDisplayShowHomeEnabled(true);
    getSupportActionBar().setIcon(R.drawable.ic_logo); //also displays wide logo
    getSupportActionBar().setDisplayShowTitleEnabled(false); //optional
Michał K
fonte
existem a muitos métodos desnecessários e não relacionadas com o ícone
user924
15

coisa mais simples de fazer; basta adicionar:

app:navigationIcon="@drawable/ic_action_navigation_menu">

ao <android.support.v7.widget.Toolbar tag

onde @drawable/ic_action_navigation_menué o nome do ícone

Pila
fonte
1
Funciona perfeitamente! Esta é a maneira correta e mais simples de adicionar o ícone de navegação na barra de ferramentas. Se você deseja verificar os cliques no ícone de navegação, pode verificar o android.R.id.homeID no seu onOptionsItemSelected(...).
Sazid
12

Uma maneira melhor de definir várias opções:

setIcon/setLogoO método só funcionará se você tiver definido DisplayOptions. Tente isto -

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

Você também pode definir opções para exibir LOGO (basta adicionar constante ActionBar.DISPLAY_USE_LOGO). Mais informações - displayOptions

Vintesh
fonte
6

Tente usar:

ActionBar ab = getSupportActionBar();
ab.setHomeButtonEnabled(true);
ab.setDisplayUseLogoEnabled(true);
ab.setLogo(R.drawable.ic_launcher);
Chris Banes
fonte
5
soou promissor - mas ainda não tem Ícone :-(
ligi
5

se você deseja definir o ícone inicial ou o verso (não o logotipo ou o ícone estático) para poder usar

 getSupportActionBar().setDisplayHomeAsUpEnabled(true);
 getSupportActionBar().setHomeAsUpIndicator( getResources().getDrawable(R.drawable.home) );
smoothumut
fonte
esta é a resposta correta, desde o surgimento de implantação e de comportamento
cutiko
só isso me deu uma aparência normal (tamanho, margens, deslocamento entre título e ícone), funciona bem mesmo com lançador de vetor ( .xml), como R.mipmap.ic_launcherouR.mipmap.ic_launcher_round
user924
e eu usei isso como ícone estático causa outras soluções logo / funciona feio
user924
5

Para a Barra de Ação:

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

Para a barra de ferramentas:

getSupportActionBar().setDisplayHomeAsUpEnabled(true);
getSupportActionBar().setHomeAsUpIndicator(R.drawable.ic_action_back);
Peter Ivanov
fonte
5
Não há diferença entre o código 2 do ActionBar e da Barra de Ferramentas. Isso é intencional?
King King
1
Para ActionBar deve ser: getActionBar (). SetDisplayHomeAsUpEnabled (true); getActionBar (). setHomeAsUpIndicator (R.drawable.ic_action_back);
Darsshan
Este é realmente o caminho a percorrer. Apenas usar setIconnão permite um botão clicável, onde setHomeAsUpIndicatore como manipular isso onOptionsItemSelectedfunciona. Obrigado!
Joshua Pinter
4
getSupportActionBar().setDisplayShowHomeEnabled(true);
getSupportActionBar().setIcon(R.drawable.ic_launcher);

OU faça um layout XML chamar otool_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>

Agora na sua atividade principal, adicione esta linha

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

Se você não quiser definir sua barra de ferramentas como barra de ação usando setSupportActionBar , poderá adicionar um logotipo ao lado do ícone de navegação (se você tiver um botão voltar, por exemplo) assim:

toolbar.setLogo();

ou em xml

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

E mesmo se você tiver um título definido na Barra de Ferramentas, o título ainda será exibido.

Ex: a marca verde na imagem abaixo é o logotipo

Barra de ferramentas com ícone de navegação, logotipo e título

Malek Hijazi
fonte
2

Tente o seguinte:

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

para ícone estático

Odilon Cenamo
fonte
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
fonte
0

No Xamarin.Android, você pode usá-los:

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

usando Android.Support.V7.App.AppCompatActivity é necessário.

Daniele D.
fonte
0

Tente isso. Para mim funcionou

getSupportActionBar().setDisplayShowHomeEnabled(true);
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
getSupportActionBar().setDisplayUseLogoEnabled(true);
Matteo
fonte
0

No Kotlin, fiz o seguinte para mostrar apenas o ícone:

supportActionBar?.setDisplayShowHomeEnabled(true)
supportActionBar?.setIcon(R.drawable.ic_icon_small)
Leon
fonte