Android: Làm cách nào để thay đổi Biểu tượng “Trang chủ” của ActionBar thành một thứ khác ngoài biểu tượng ứng dụng?


114

Biểu tượng chính của ứng dụng của tôi bao gồm hai phần trong một hình ảnh: một logo và một vài chữ cái bên dưới nó. Điều này hoạt động tốt đối với biểu tượng trình khởi chạy cho ứng dụng, nhưng khi biểu tượng xuất hiện ở cạnh trái của Thanh hành động, các chữ cái sẽ bị cắt và trông không đẹp.

Tôi muốn cung cấp cho ActionBar một phiên bản riêng của biểu tượng, chỉ có phần "logo" chứ không phải các chữ cái bên dưới nó, nhưng cho đến nay vẫn trống. Thành thật mà nói, tôi không thể tìm thấy bất kỳ câu trả lời nào cho điều này, và tôi thậm chí không thể tìm thấy câu hỏi ở bất cứ đâu.

Câu trả lời:


218

ActionBar sẽ sử dụng thuộc tính android: logo trong tệp kê khai của bạn, nếu thuộc tính này được cung cấp. Điều đó cho phép bạn sử dụng các tài nguyên có thể vẽ riêng biệt cho biểu tượng (Trình khởi chạy) và biểu trưng (Thanh hành động, trong số những thứ khác).


2
Vâng. Bạn cũng có thể sử dụng kiểu tùy chỉnh cho thanh tác vụ của mình để cung cấp biểu trưng hoặc biểu tượng sẽ được sử dụng thay cho những biểu tượng được cung cấp bởi tệp kê khai.
adamp

@Joe, Bất kỳ giải pháp cho API <11 sử dụng AppCompat
cafebabe1991

49

Trong AndroidManifest.xml:

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

Trong styles.xml: (Xem 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 cũng sẽ hoạt động. Tôi không biết sự khác biệt.
AlikElzin-kilaka

Xin lỗi vì đã làm rách vết thương đang lành :-) Nhưng sự khác biệt là giải pháp thay đổi kiểu được đề xuất ở đây chỉ áp dụng biểu tượng tùy chỉnh cho thanh tác vụ, nơi mà việc xác định android:logotrong tệp kê khai cũng có thể ảnh hưởng đến các khu vực khác.
dbm

@dbm, bạn có thể vui lòng cho một ví dụ về 'các khu vực khác' được không?
AlikElzin-kilaka

2
Đúng vậy, tôi rất tò mò, tôi bắt đầu tìm kiếm trên Google và đây là những gì trang web dành cho nhà phát triển Android nói: developer.android.com/guide/topics/manifest/… . Tuy nhiên, tôi không rõ điều này khác với andorid:iconthuộc tính như thế nào : developer.android.com/guide/topics/manifest/…
dbm

2
Tài liệu Action Bar cũng cho biết bạn có thể thêm android:iconvào <activity>phần tử, vì vậy bạn có thể dễ dàng thay đổi nó cho các hoạt động khác nhau. Tôi đã thử điều đó và nó hoạt động tuyệt vời. Không cần phải gây rối với một chủ đề tùy chỉnh hoặc lo lắng về việc ảnh hưởng đến tất cả các hoạt động.
Jason

18

Hãy thử dòng này

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

1
LƯU Ý: setHomeAsUpIndicatorlà Android API 18+.
Joshua Pinter

8

Nếu bạn đang sử dụng AppCompat, cách duy nhất để đặt biểu tượng ActionBar trên các thiết bị chạy Gingerbread (API 10) trở xuống là đặt thuộc tính android: icon trong mọi Hoạt động trong tệp kê khai của bạn hoặc đặt thuộc tính có thể vẽ theo chương trình.

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

Cập nhật: Tuy nhiên, hãy cảnh báo rằng biểu tượng ứng dụng sẽ bị ghi đè nếu bạn đặt thuộc tính android: icon trên Hoạt động khởi chạy. Công việc duy nhất mà tôi biết là có một Hoạt động giật gân hoặc giả, sau đó khởi chạy Hoạt động chính của bạn.


không hoạt động !! Bạn đã thử chưa? Xin vui lòng tìm một giải pháp tôi cần nó.
Apurva

8

Lấy cảm hứng từ TheIT, tôi chỉ làm cho điều này hoạt động bằng cách thao tác tệp kê khai nhưng theo một cách hơi khác. Đặt biểu tượng trong cài đặt ứng dụng để phần lớn các hoạt động nhận được biểu tượng. Trên hoạt động mà bạn muốn hiển thị biểu trưng, ​​hãy thêm thuộc tính android: logo vào khai báo hoạt động. Trong ví dụ sau, chỉ LogoActivity mới có biểu tượng, trong khi những cái khác sẽ mặc định là biểu tượng.

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

Hy vọng điều này sẽ giúp người khác ra ngoài!


Tôi đang sử dụng AppCompat v7, vì tôi muốn hỗ trợ android 2.3, nhưng phương pháp của bạn không hoạt động.
liam xu

6

Hãy thử, nếu sử dụng "mở rộng AppCompatActivity" và thanh tác vụ hiện tại.

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

3

tạo logo

trong thư mục " drawable-..." tạo trong tất cả chúng logo.png. Vị trí của các thư mục: [YOUR APP]\app\src\main\res

Trong AndroidManifest.xml thêm dòng: android:logo="@drawable/logo"

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

đó là nó.


0

Có thể muốn kiểm tra điều này, có mọi thứ bạn cần cho các biểu tượng ứng dụng của mình

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

cập nhật

Tôi nghĩ theo mặc định, nó sử dụng biểu tượng trình khởi chạy của bạn ... Đặt cược tốt nhất của bạn là tạo một hình ảnh riêng biệt ... Được thiết kế cho thanh tác vụ và sử dụng nó. Để kiểm tra: http://developer.android.com/guide/topics/ui/actionbar.html#ActionItems


Cảm ơn bạn vì liên kết đó và cuối cùng tôi có thể xóa các chữ cái khỏi biểu tượng của mình và sử dụng cùng một biểu tượng "biểu trưng" trong toàn bộ ứng dụng, nhưng tôi vẫn có thể cần sử dụng phiên bản nhỏ hơn của nó hoặc một phiên bản hơi khác của nó trên ActionBar và đó là những gì tôi đang cố gắng tìm hiểu.
Phil Ringsmuth
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.