Android: Como alterar o ícone “Home” da ActionBar para algo diferente do ícone do aplicativo?

114

O ícone principal do meu aplicativo consiste em duas partes em uma imagem: um logotipo e algumas letras abaixo dele. Isso funciona bem para o ícone do iniciador do aplicativo, mas quando o ícone aparece na borda esquerda da ActionBar, as letras são cortadas e não parece bom.

Gostaria de fornecer à ActionBar uma versão separada do ícone, com apenas a parte do "logotipo" e não as letras abaixo dela, mas até agora estão vazios. Sinceramente, não consigo encontrar uma resposta para isso, e nem mesmo consigo encontrar a própria pergunta em lugar nenhum.

Phil Ringsmuth
fonte

Respostas:

218

A ActionBar usará o atributo android: logo do seu manifesto, se houver. Isso permite que você use recursos drawable separados para o ícone (Launcher) e o logotipo (ActionBar, entre outras coisas).

Joe
fonte
2
Sim. Você também pode usar um estilo personalizado para sua barra de ação para fornecer um logotipo ou ícone que será usado no lugar daqueles fornecidos pelo manifesto.
adamp de
@Joe, Qualquer solução para API <11 usando AppCompat
cafebabe1991
49

Em AndroidManifest.xml:

<application
    android:icon="@drawable/launcher"
    android:label="@string/app_name"
    android:name="com..."
    android:theme="@style/Theme">...</Application>

Em styles.xml: (Consulte android:icon)

<style name="Theme" parent="@android:style/Theme.Holo.Light">
    <item name="android:actionBarStyle">@style/ActionBar</item>
</style>
<style name="ActionBar" parent="@android:style/Widget.Holo.Light.ActionBar">
    <item name="android:icon">@drawable/icon</item>
</style>
AlikElzin-kilaka
fonte
android: logo também funcionará. Eu não sei a diferença.
AlikElzin-kilaka
Desculpe por dilacerar feridas curativas :-) Mas a diferença é que a solução de mudança de estilo sugerida aqui aplica o ícone personalizado apenas à barra de ação, onde definir o android:logono manifesto pode afetar outras áreas também.
dbm
@dbm, você pode dar um exemplo de 'outras áreas'?
AlikElzin-kilaka
2
Sim, fiquei tão curioso que comecei a pesquisar sobre ele no Google e é isso que o site do desenvolvedor Android diz: developer.android.com/guide/topics/manifest/… . Não está claro para mim como isso é diferente do andorid:iconatributo: developer.android.com/guide/topics/manifest/…
dbm
2
O documento da Barra de ação também diz que você pode adicionar android:iconao <activity>elemento, então você pode facilmente alterá-lo para diferentes atividades. Eu tentei isso e funcionou muito bem. Não há necessidade de mexer com um tema personalizado ou se preocupar em afetar todas as atividades.
Jason de
18

Por favor tente esta linha

getSupportActionBar().setHomeAsUpIndicator(R.drawable.back_arrow);
Felix cruz
fonte
1
NOTA: setHomeAsUpIndicatoré Android API 18+.
Joshua Pinter,
8

Se você estiver usando o AppCompat, a única maneira de definir o ícone ActionBar em dispositivos que executam o Gingerbread (API 10) ou abaixo é definir o atributo android: icon em cada Activity em seu manifesto ou definir o drawable programaticamente.

<manifest>
    <application>
        ...
        <activity android:name="com.your.ActivityName"
            ...
            android:icon="@drawable/ab_logo"/>
        ...
   </application>
</manifest>

Atualizar: esteja avisado, entretanto, que o ícone do aplicativo será substituído se você definir o atributo android: icon na atividade de inicialização. A única solução que conheço é ter uma atividade inicial ou fictícia que então inicia sua atividade principal.

A coisa
fonte
não funciona !! Tentaste? Por favor, encontre uma solução que eu preciso.
Apurva
8

Inspirado pelo TheIT, eu só fiz isso funcionar manipulando o arquivo de manifesto, mas de uma maneira um pouco diferente. Defina o ícone na configuração do aplicativo para que a maioria das atividades receba o ícone. Na atividade em que deseja mostrar o logotipo, adicione o atributo android: logo à declaração da atividade. No exemplo a seguir, apenas LogoActivity deve ter o logotipo, enquanto os outros terão o ícone padrão.

<application
    android:name="com.your.app"
    android:icon="@drawable/your_icon"
    android:label="@string/app_name">

    <activity
        android:name="com.your.app.LogoActivity"
        android:logo="@drawable/your_logo"
        android:label="Logo Activity" >

    <activity
        android:name="com.your.app.IconActivity1"
        android:label="Icon Activity 1" >

    <activity
        android:name="com.your.app.IconActivity2"
        android:label="Icon Activity 2" >

</application>

Espero que isso ajude mais alguém!

proudgeekdad
fonte
Estou usando o AppCompat v7 porque desejo oferecer suporte ao Android 2.3, mas seu método não funciona.
liam xu
6

Por favor, tente, se usar "estende AppCompatActivity" e barra de ação presente.

 ActionBar eksinbar=getSupportActionBar();
if (eksinbar != null) {
    eksinbar.setDisplayHomeAsUpEnabled(true);
    eksinbar.setHomeAsUpIndicator(R.mipmap.imagexxx);
}
Mustafa
fonte
3

criando logotipo

nas pastas " drawable-..." crie em todos eles logo.png. A localização das pastas: [YOUR APP]\app\src\main\res

Em AndroidManifest.xml, adicione a linha: android:logo="@drawable/logo"

<application
    android:allowBackup="true"
    android:icon="@drawable/ic_launcher"
    android:logo="@drawable/logo"
    ...

é isso aí.

Awariat
fonte
0

Talvez você queira verificar isso, tem tudo que você precisa para os ícones do seu aplicativo

http://developer.android.com/guide/practices/ui_guidelines/icon_design.html

atualizar

Acho que por padrão ele usa o ícone do iniciador ... Sua melhor aposta é criar uma imagem separada ... Projetado para a barra de ação e usando isso. Para isso, verifique: http://developer.android.com/guide/topics/ui/actionbar.html#ActionItems

Stevanicus
fonte
Obrigado por esse link, e posso acabar removendo as letras do meu ícone e usando o mesmo ícone de "logotipo" em todo o aplicativo, mas ainda posso precisar usar uma versão menor dele, ou uma versão ligeiramente diferente dele no a ActionBar, e é isso que estou tentando descobrir.
Phil Ringsmuth