Android: Bagaimana cara mengubah Ikon "Rumah" ActionBar menjadi sesuatu selain ikon aplikasi?

114

Ikon utama aplikasi saya terdiri dari dua bagian dalam satu gambar: logo dan beberapa huruf di bawahnya. Ini berfungsi dengan baik untuk ikon peluncur untuk aplikasi, tetapi ketika ikon muncul di tepi kiri ActionBar, huruf-hurufnya terpotong dan tidak terlihat bagus.

Saya ingin memberi ActionBar versi ikon yang terpisah, dengan hanya bagian "logo" dan bukan huruf di bawahnya, tetapi sejauh ini kosong. Sejujurnya saya tidak dapat menemukan jawaban untuk ini, dan saya bahkan tidak dapat menemukan pertanyaan itu sendiri di mana pun.

Phil Ringsmuth
sumber

Jawaban:

218

ActionBar akan menggunakan atribut android: logo dari manifes Anda, jika disediakan. Itu memungkinkan Anda menggunakan sumber daya dapat digambar yang terpisah untuk ikon (Peluncur) dan logo (ActionBar, antara lain).

Joe
sumber
2
Ya. Anda juga dapat menggunakan gaya kustom untuk bilah tindakan Anda untuk menyediakan logo atau ikon yang akan digunakan sebagai pengganti yang disediakan oleh manifes.
adamp
@ Joe, Solusi apa pun untuk API <11 menggunakan AppCompat
cafebabe1991
49

Di AndroidManifest.xml:

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

Dalam styles.xml: (Lihat 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
sumber
android: logo juga akan berfungsi. Saya tidak tahu bedanya.
AlikElzin-kilaka
Maaf karena telah merobek luka penyembuhan :-) Tetapi perbedaannya adalah bahwa solusi perubahan gaya yang disarankan di sini menerapkan ikon khusus hanya pada bilah tindakan, sedangkan menentukan android:logodalam manifes dapat memengaruhi area lain juga.
dbm
@dbm, dapatkah anda memberikan contoh 'daerah lain'?
AlikElzin-kilaka
2
Ya, saya sangat penasaran saya mulai mencari di Google dan inilah yang dikatakan situs pengembang Android: developer.android.com/guide/topics/manifest/… . Tidak jelas bagi saya bagaimana ini berbeda dari andorid:iconatribut, meskipun: developer.android.com/guide/topics/manifest/…
dbm
2
Aksi Bar doc juga mengatakan Anda dapat menambahkan android:iconke <activity>elemen, sehingga Anda bisa dengan mudah mengubahnya untuk kegiatan yang berbeda. Saya mencobanya dan hasilnya bagus. Tidak perlu mengotak-atik tema khusus atau khawatir akan memengaruhi semua aktivitas.
Jason
18

Silakan coba baris ini

getSupportActionBar().setHomeAsUpIndicator(R.drawable.back_arrow);
Felix Cruz
sumber
1
CATATAN: setHomeAsUpIndicatoradalah Android API 18+.
Joshua Pinter
8

Jika Anda menggunakan AppCompat, satu-satunya cara untuk menyetel ikon ActionBar pada perangkat yang menjalankan Gingerbread (API 10) atau yang lebih lama adalah dengan menyetel atribut android: icon di setiap Aktivitas di manifes Anda atau menyetel drawable secara terprogram.

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

Pembaruan: Namun berhati-hatilah karena ikon aplikasi akan diganti jika Anda menyetel atribut android: icon pada aktivitas peluncuran. Satu-satunya solusi yang saya tahu adalah memiliki Aktivitas percikan atau tiruan yang kemudian meluncurkan Aktivitas utama Anda.

TheIT
sumber
tidak bekerja !! Apakah kamu sudah mencobanya Tolong temukan solusi yang saya butuhkan.
Apurva
8

Terinspirasi oleh TheIT, saya baru saja menyelesaikan ini dengan memanipulasi file manifes tetapi dengan cara yang sedikit berbeda. Atur ikon dalam pengaturan aplikasi sehingga sebagian besar aktivitas mendapatkan ikon. Pada aktivitas tempat Anda ingin menampilkan logo, tambahkan atribut android: logo ke deklarasi aktivitas. Dalam contoh berikut, hanya LogoActivity yang harus memiliki logo, sedangkan yang lain akan menggunakan ikon secara default.

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

Semoga ini bisa membantu orang lain!

proudgeekdad
sumber
Saya menggunakan AppCompat v7, karena saya ingin mendukung Android 2.3, tetapi metode Anda tidak berhasil.
liam xu
6

Silakan Coba, jika menggunakan "extends AppCompatActivity" dan menampilkan actionbar.

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

membuat logo

dalam folder " drawable-..." buat semuanyalogo.png . Lokasi folder: [YOUR APP]\app\src\main\res

Di AndroidManifest.xml tambahkan baris: android:logo="@drawable/logo"

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

itu dia.

awariat
sumber
0

Mungkin ingin memeriksanya, mendapatkan semua yang Anda butuhkan untuk ikon aplikasi Anda

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

memperbarui

Saya pikir secara default menggunakan ikon peluncur Anda ... Taruhan terbaik Anda adalah membuat gambar terpisah ... Didesain untuk bilah tindakan dan menggunakannya. Untuk itu, periksa: http://developer.android.com/guide/topics/ui/actionbar.html#ActionItems

Stevanicus
sumber
Terima kasih untuk tautan itu, dan saya mungkin akan menghapus huruf dari ikon saya dan menggunakan ikon "logo" yang sama di seluruh aplikasi, tetapi saya mungkin masih perlu menggunakan versi yang lebih kecil, atau versi yang sedikit berbeda di ActionBar, dan itulah yang saya coba cari tahu.
Phil Ringsmuth