Android: Jak zmienić ikonę „Strona główna” ActionBar na coś innego niż ikona aplikacji?


114

Główna ikona mojej aplikacji składa się z dwóch części na jednym obrazie: logo i kilku liter pod nim. Działa to dobrze w przypadku ikony programu uruchamiającego dla aplikacji, ale gdy ikona pojawia się na lewej krawędzi ActionBar, litery są ucinane i nie wygląda to dobrze.

Chciałbym zapewnić ActionBarowi oddzielną wersję ikony, tylko z częścią "logo", a nie literami pod nią, ale jak dotąd były one puste. Szczerze mówiąc, nie mogę znaleźć żadnej odpowiedzi na to, a nawet nie mogę nigdzie znaleźć samego pytania.

Odpowiedzi:


218

ActionBar użyje atrybutu android: logo Twojego manifestu, jeśli taki zostanie podany. Pozwala to na użycie oddzielnych zasobów do rysowania dla ikony (Launcher) i logo (między innymi ActionBar).


2
Tak. Możesz również użyć niestandardowego stylu paska akcji, aby zapewnić logo lub ikonę, które będą używane zamiast tych dostarczonych w manifeście.
adamp

@Joe, Dowolne rozwiązanie dla API <11 przy użyciu AppCompat
cafebabe1991

49

W AndroidManifest.xml:

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

W styles.xml: (zobacz 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>

android: logo też będzie działać. Nie znam różnicy.
AlikElzin-kilaka

Przepraszamy za rozrywanie ran gojących się :-) Ale różnica polega na tym, że sugerowane tutaj rozwiązanie zmiany stylu powoduje zastosowanie niestandardowej ikony tylko do paska akcji, gdzie zdefiniowanie android:logow manifeście może wpływać również na inne obszary.
dbm

@dbm, czy możesz podać przykład „innych obszarów”?
AlikElzin-kilaka

2
Tak, zaciekawiło mnie to, że zacząłem google na ten temat i tak mówi strona programistów Androida: developer.android.com/guide/topics/manifest/… . Nie jest dla mnie jasne, czym różni się to od andorid:iconatrybutu: developer.android.com/guide/topics/manifest/…
dbm

2
Action Bar doc mówi również można dodać android:icondo <activity>elementu, więc można łatwo zmienić go do różnych działań. Próbowałem tego i zadziałało świetnie. Nie musisz majstrować przy niestandardowym motywie ani martwić się o wpływ na wszystkie działania.
Jason

18

Spróbuj tego wiersza

getSupportActionBar().setHomeAsUpIndicator(R.drawable.back_arrow);

1
UWAGA: setHomeAsUpIndicatorto Android API 18+.
Joshua Pinter,

8

Jeśli korzystasz z AppCompat, jedynym sposobem ustawienia ikony ActionBar na urządzeniach z Gingerbread (API 10) lub niższym jest ustawienie atrybutu android: icon w każdym działaniu w Twoim manifeście lub ustawienie go programowo.

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

Aktualizacja: Ostrzegamy jednak, że ikona aplikacji zostanie zastąpiona, jeśli ustawisz atrybut android: icon w działaniu uruchamiającym. Jedyne obejście, jakie znam, to mieć działanie splash lub dummy, które następnie uruchamia Twoje główne działanie.


nie działa !! Próbowałeś tego? Proszę znaleźć rozwiązanie, którego potrzebuję.
Apurva,

8

Zainspirowany TheIT, po prostu uruchomiłem to, manipulując plikiem manifestu, ale w nieco inny sposób. Ustaw ikonę w ustawieniach aplikacji tak, aby większość działań otrzymała ikonę. W działaniu, w którym chcesz wyświetlać logo, dodaj atrybut android: logo do deklaracji działania. W poniższym przykładzie tylko LogoActivity powinno mieć logo, podczas gdy inne domyślnie będą miały ikonę.

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

Mam nadzieję, że to pomoże komuś innemu!


Używam AppCompat v7, ponieważ chcę obsługiwać Androida 2.3, ale Twoja metoda nie działa.
Liam Xu

6

Spróbuj, jeśli używasz „extends AppCompatActivity” i przedstaw pasek akcji.

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

3

tworzenie logo

w folderach „ drawable-...” utwórz w nich wszystkich logo.png. Lokalizacja folderów: [YOUR APP]\app\src\main\res

W AndroidManifest.xml dodaj wiersz: android:logo="@drawable/logo"

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

Otóż ​​to.


0

Może chcę to sprawdzić, mam wszystko, czego potrzebujesz do ikon aplikacji

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

aktualizacja

Myślę, że domyślnie używa ikony programu uruchamiającego ... Najlepszym rozwiązaniem jest utworzenie oddzielnego obrazu ... Zaprojektowany dla paska akcji i wykorzystujący to. W tym celu: http://developer.android.com/guide/topics/ui/actionbar.html#ActionItems


Dziękuję za ten link i może skończyć się usunięciem liter z mojej ikony i używaniem tej samej ikony „logo” w całej aplikacji, ale być może będę musiał użyć mniejszej jej lub nieco innej wersji w ActionBar, i właśnie tego próbuję się dowiedzieć.
Phil Ringsmuth
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.