2012-07-28 46 views
7

Tôi hiện đang triển khai hỗ trợ chủ đề cho ứng dụng của mình và một phần của nó đang thay đổi biểu tượng ứng dụng của thanh tác vụ. Tôi muốn sử dụng biểu tượng tối khi chọn Ánh sáng Holo. Mọi thứ được thực hiện trong phương thức ngoại trừ phần mà biểu tượng ứng dụng trên thanh tác vụ được đặt. Mã mà cố gắng sử dụng là:Thay đổi biểu tượng thanh Hành động

getActionBar(); 
ActionBar.setIcon(R.drawable.my_icon); 

"Không có tham chiếu nào ở đây" là lỗi mà tôi đang gặp phải. Làm thế nào điều này nên được thực hiện một cách chính xác?

BTW minSdkVersion của tôi là 14 nên không có công cụ hành động thanh sherlock.

Trả lời

18
getActionBar(); 

Bạn đang ném thanh hành động ngay tại đó. getActionBar() trả về phiên bản ActionBar, sau đó bạn cần gọi số setIcon(). Giống như vậy:

ActionBar actionBar = getActionBar(); 
actionBar.setIcon(R.drawable.my_icon); 
+4

'setIcon' được hỗ trợ ở cấp API 14 trở lên. Bạn cũng có thể đặt biểu tượng ActionBar trong tệp kê khai như được giải thích tại đây: http://stackoverflow.com/a/6351736/1182823 –

+0

Giải pháp này không hoạt động khi sử dụng thư viện được hỗ trợ v7 nơi tôi sử dụng getSupportActionBar(); - Bất kì lời đề nghị nào? cảm ơn –

0

Bạn cần phải thêm đối tượng có thể kéo mà bạn muốn tham chiếu vào thư mục drawable/ của mình dưới res/.

chỉnh sửa: Trong thư mục cài đặt Android của bạn, có rất nhiều hình ảnh lưu trữ để sử dụng. Bạn có thể tìm thấy nó ở đó.

+0

Tôi đã thêm các biểu tượng, đó không phải là vấn đề. Tự động hoàn thành có thể định vị biểu tượng của tôi mà không gặp bất kỳ sự cố nào. Tôi nhận được cùng một lỗi không có vấn đề mà tôi lôi kéo excisting excisting tôi. Tôi đã cố gắng viết sai chính tả tài nguyên có thể vẽ của mình theo mục đích và tôi gặp lỗi tương tự nhưng thay vì đánh dấu mã "setIcon" màu đỏ, chữ viết sai chính tả được đánh dấu màu đỏ. Đây là bằng chứng cho thấy những người có thể rút được và IDE của tôi có thể tìm thấy nó. – SweSnow

0

Câu trả lời hiện tại là rất chính xác. Có, tuy nhiên, cũng là một thay thế. Cách tiếp cận tối thiểu sẽ là sử dụng

getActionBar().setIcon(R.drawable.my_icon);

Hoàn thành công việc của bạn ngay lập tức. :)

Chi tiết kỹ thuật: Vì getActionBar() theo mặc định trả về một đối tượng, bạn có thể trực tiếp thao tác nó mà không phải nhận nó trong đối tượng trong phạm vi một cách rõ ràng.

4

Mặc dù câu trả lời trễ một chút nhưng tôi nghĩ nó có thể hữu ích.

Từ bên trong một hoạt động: Đối với mức API 14 trở lên:

getActionBar().setIcon(R.drawable.my_icon); 

Đối với mức API thấp hơn chúng ta phải mở rộng ActionBarActivity và sau đó:

getSupportActionBar().setIcon(R.drawable.my_icon); 

Từ bên trong một Fragment : Đối với mức API 14 trở lên:

getActivity().getActionBar().setIcon(R.drawable.my_icon); 

Đối với mức API thấp hơn chúng ta có thể sử dụng (hoạt động phải mở rộng ActionBarActivity):

((ActionBarActivity)getActivity()).getSupportActionBar().setIcon(R.drawable.my_icon); 

Và trong cả hai trường hợp chúng tôi phải gọi setDisplayShowHomeEnabled (true) trước khi thiết lập biểu tượng hoặc logo.

((ActionBarActivity)getActivity()).getSupportActionBar().setDisplayShowHomeEnabled(true); 

((ActionBarActivity)getActivity()).getSupportActionBar().setIcon(R.drawable.my_icon); 
0

Gọi cho số setIcon không đủ cho tôi.

Trước đó, tôi đã phải chuyển màn hình từ biểu tượng hoạt động để biểu tượng hoạt động:

actionBar.setDisplayUseLogoEnabled(false); 

Đối với sự khác nhau giữa biểu tượng hoạt động và logo thấy Android icon vs logo.

0

Tôi đang sử dụng tính năng này để sử dụng và nó hoạt động với tôi. Hy vọng điều này giúp đỡ tất cả

actionBar.setDisplayHomeAsUpEnabled(true); 
actionBar.setHomeAsUpIndicator(R.drawable.icon); 
0

Hãy thử điều này

setSupportActionBar(toolbar); 
    if (getSupportActionBar() != null) 
    getSupportActionBar().setIcon(R.drawable.your_icon); 
Các vấn đề liên quan