Android: จะเปลี่ยนไอคอน "หน้าแรก" ของ ActionBar ให้เป็นอย่างอื่นที่ไม่ใช่ไอคอนแอปได้อย่างไร


114

ไอคอนหลักของแอปพลิเคชันของฉันประกอบด้วยสองส่วนในภาพเดียว: โลโก้และตัวอักษรสองสามตัวด้านล่าง สิ่งนี้ใช้ได้ดีกับไอคอนตัวเรียกใช้งานสำหรับแอป แต่เมื่อไอคอนปรากฏที่ขอบด้านซ้ายของ ActionBar ตัวอักษรจะถูกตัดออกและดูไม่ดี

ฉันต้องการให้ ActionBar มีไอคอนเวอร์ชันแยกต่างหากโดยมีเพียงส่วน "โลโก้" ไม่ใช่ตัวอักษรที่อยู่ด้านล่าง แต่จนถึงตอนนี้ก็ว่างเปล่า ฉันไม่สามารถหาคำตอบเกี่ยวกับเรื่องนี้ได้อย่างตรงไปตรงมาและฉันไม่สามารถหาคำถามได้ทุกที่

คำตอบ:


218

ActionBar จะใช้แอตทริบิวต์android: logoของรายการของคุณหากมีให้ ซึ่งช่วยให้คุณใช้ทรัพยากรที่วาดได้แยกกันสำหรับไอคอน (Launcher) และโลโก้ (ActionBar เป็นต้น)


2
อ๋อ คุณยังสามารถใช้สไตล์ที่กำหนดเองสำหรับแถบการทำงานของคุณเพื่อจัดเตรียมโลโก้หรือไอคอนที่จะใช้แทนรูปแบบที่มาในรายการ
adamp

@Joe โซลูชันใด ๆ สำหรับ API <11 โดยใช้ AppCompat
cafebabe1991

49

ใน AndroidManifest.xml:

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

ใน styles.xml: (ดู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: โลโก้ก็ใช้งานได้เช่นกัน ฉันไม่รู้ถึงความแตกต่าง
AlikElzin-kilaka

ขออภัยที่ทำให้แผลหาย :-) แต่ความแตกต่างคือวิธีแก้ปัญหาการเปลี่ยนรูปแบบที่แนะนำในที่นี้จะใช้ไอคอนที่กำหนดเองกับแถบการทำงานเท่านั้นซึ่งการกำหนดandroid:logoในไฟล์ Manifest อาจส่งผลกระทบต่อส่วนอื่น ๆ ด้วยเช่นกัน
dbm

@dbm ช่วยยกตัวอย่าง 'พื้นที่อื่น' ได้ไหม?
AlikElzin-kilaka

2
ใช่ผมอยากรู้อยากเห็นดังนั้นผมจึงเริ่ม googleing กับมันและนี่คือสิ่งที่เว็บไซต์ของนักพัฒนา Android says: developer.android.com/guide/topics/manifest/... ยังไม่ชัดเจนสำหรับฉันว่าสิ่งนี้แตกต่างจากandorid:iconแอตทริบิวต์อย่างไร: developer.android.com/guide/topics/manifest/…
dbm

2
Action Bar docยังระบุว่าคุณสามารถเพิ่มได้android:iconใน<activity>องค์ประกอบได้ดังนั้นคุณจึงสามารถเปลี่ยนมันสำหรับกิจกรรมต่างๆได้อย่างง่ายดาย ฉันลองแล้วและได้ผลดี ไม่จำเป็นต้องยุ่งกับธีมที่กำหนดเองหรือกังวลว่าจะส่งผลกระทบต่อกิจกรรมทั้งหมด
Jason


8

หากคุณกำลังใช้ AppCompat วิธีเดียวในการตั้งค่าไอคอน ActionBar บนอุปกรณ์ที่ใช้ Gingerbread (API 10) หรือต่ำกว่าคือการตั้งค่าแอตทริบิวต์ android: icon ในทุกกิจกรรมในไฟล์ Manifest ของคุณหรือตั้งค่าที่วาดได้โดยทางโปรแกรม

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

อัปเดต: โปรดเตือนว่าไอคอนแอปพลิเคชันจะถูกแทนที่หากคุณตั้งค่าคุณลักษณะ android: icon ในกิจกรรมการเปิดตัว วิธีแก้ปัญหาเดียวที่ฉันรู้คือการมีกิจกรรมสแปลชหรือดัมมี่ซึ่งจะเปิดตัวกิจกรรมหลักของคุณ


ใช้ไม่ได้ !! คุณลองหรือยัง? โปรดหาทางแก้ไขที่ฉันต้องการ
Apurva

8

ได้รับแรงบันดาลใจจาก TheIT ฉันแค่ทำให้สิ่งนี้ทำงานได้โดยจัดการไฟล์ manifest แต่มีรูปแบบที่แตกต่างกันเล็กน้อย ตั้งค่าไอคอนในการตั้งค่าแอปพลิเคชันเพื่อให้กิจกรรมส่วนใหญ่ได้รับไอคอน ในกิจกรรมที่คุณต้องการแสดงโลโก้ให้เพิ่มแอตทริบิวต์ android: logo ในการประกาศกิจกรรม ในตัวอย่างต่อไปนี้ LogoActivity เท่านั้นที่ควรมีโลโก้ในขณะที่โลโก้อื่น ๆ จะมีค่าเริ่มต้นเป็นไอคอน

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

หวังว่านี่จะช่วยคนอื่นได้!


ฉันใช้ AppCompat v7 เพราะฉันต้องการรองรับ android 2.3 แต่วิธีของคุณใช้ไม่ได้ผล
liam xu

6

โปรดลองหากใช้ "ขยาย AppCompatActivity" และแสดงแถบการทำงาน

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

3

สร้างโลโก้

ในโฟลเดอร์ " drawable-..." logo.pngสร้างในทั้งหมดของพวกเขา ตำแหน่งของโฟลเดอร์: [YOUR APP]\app\src\main\res

ใน AndroidManifest.xml add line: android:logo="@drawable/logo"

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

แค่นั้นแหละ.


0

อาจต้องการตรวจสอบสิ่งนี้มีทุกสิ่งที่คุณต้องการสำหรับไอคอนแอปของคุณ

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

ปรับปรุง

ฉันคิดว่าโดยค่าเริ่มต้นจะใช้ไอคอนตัวเรียกใช้งานของคุณ ... ทางออกที่ดีที่สุดของคุณคือสร้างภาพแยกต่างหาก ... ออกแบบมาสำหรับแถบการทำงานและใช้สิ่งนั้น สำหรับการตรวจสอบนั้น: http://developer.android.com/guide/topics/ui/actionbar.html#ActionItems


ขอบคุณสำหรับลิงก์นั้นและฉันอาจจะลบตัวอักษรออกจากไอคอนของฉันและใช้ไอคอน "โลโก้" เดียวกันทั่วทั้งแอป แต่ฉันอาจต้องใช้เวอร์ชันที่เล็กกว่านี้หรือใช้เวอร์ชันอื่นเล็กน้อย ActionBar และนั่นคือสิ่งที่ฉันพยายามค้นหา
Phil Ringsmuth
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.