2012-04-08 55 views
37

Tôi đang cố gắng triển khai ActionBarSherlock vì tôi được cho biết là việc triển khai và tùy chỉnh tương đối dễ dàng. Tôi đã tìm thấy nó khá dễ dàng để thực hiện, nhưng tôi đang cố gắng thay đổi màu nền của ActionBar và nó đang chứng minh khó khăn.Thay đổi màu nền ActionBarSherlock

Theo trang web (link), có vẻ như bạn có thể kế thừa một trong các chủ đề của ActionBarSherlock và sau đó ghi đè lên các thuộc tính bạn cần.

Đây là những gì tôi có cho đến nay:

<?xml version="1.0" encoding="UTF-8"?> 
<resources> 
    <style name="Theme.ActionBar" parent="Theme.Sherlock.ForceOverflow"> 
     <item name="android:background">#000000</item> 
     <item name="background">#000000</item> 
    </style> 
</resources> 

Tôi nhận thấy chủ đề built-in đang sử dụng hình ảnh cho nền, nhưng tôi cầu nguyện Tôi không cần phải tạo ra hình ảnh để thay đổi màu nền.

Cảm ơn.

Trả lời

77

Màu nền của thanh tác vụ được xác định theo kiểu cho thanh tác vụ chứ không phải trong chính chủ đề đó. Bạn sẽ cần thực hiện một việc như sau:

<style name="Theme.MyTheme" parent="Theme.Sherlock.ForceOverflow"> 
    <item name="actionBarStyle">@style/Widget.MyTheme.ActionBar</item> 
    <item name="android:actionBarStyle">@style/Widget.MyTheme.ActionBar</item> 
</style> 

<style name="Widget.MyTheme.ActionBar" parent="Widget.Sherlock.ActionBar"> 
    <item name="android:background">#ff000000</item> 
    <item name="background">#ff000000</item> 
</style> 

Hãy cẩn thận khi sử dụng các màu được xác định trong XML. ColorDrawable không tôn trọng giới hạn lượt xem của nó trên pre-Honeycomb vì vậy nếu bạn sử dụng điều hướng tab với nền riêng cho chế độ xem tab xếp chồng, bạn sẽ gặp sự cố.

+0

Cảm ơn bạn đã phản hồi. Tôi không sử dụng các tab hay bất cứ thứ gì, chỉ cần một ActionBar với một số hành động, vì vậy nó có thể sử dụng các màu thay vì hình ảnh? Tôi đang sử dụng ActionBarSherlock trên 8 ứng dụng khác nhau và tôi không có chuyên môn để tạo hình ảnh. –

+0

BTW, mã của bạn đã làm việc để thêm màu nền. Cảm ơn. –

+0

Nó an toàn để sử dụng màu sắc miễn là bạn không sử dụng nó cho thuộc tính nền xếp chồng lên nhau. Nền thông thường và nền phân tách sẽ ổn nhưng trên pre-3.0 sử dụng màu để xếp chồng lên nhau sẽ không hiển thị chính xác. –

54

tôi chỉ sử dụng

getSupportActionBar().setBackgroundDrawable(new ColorDrawable(Color.parseColor("#00853c"))); 

Nó đã thay đổi màu nền. Hy vọng nó giúp.

+4

ngắn & ngọt ... –

+2

@alicanbatur, nhưng nếu bạn dự định có phong cách riêng trong ActionBar và sử dụng nó dọc theo toàn bộ ứng dụng, nó không phải là rất tốt đẹp nếu bạn dán dòng mã đó vào mọi lớp mà bạn muốn chỉnh sửa nền :) – noloman

+0

Cảm ơn bạn đã tiết kiệm rất nhiều nỗ lực. –

2

Mã được đề cập bởi Jake Wharton là đúng sự thật. Nhưng khi áp dụng các mã để các styles.xml có thể không hoạt động nếu bạn có minSDK < 11 vì android: actionBarStyle được hỗ trợ trong API-11 +

Để giải quyết rằng lỗi:

Tạo một thư mục của các giá trị-v11 trong thư mục res của bạn và tạo tệp XML như đã đề cập ở trên.

+1

Điều đó chỉ giải quyết được vấn đề cho> = 11. –

Các vấn đề liên quan