2015-10-15 27 views
28

Cách thay đổi biểu tượng FAB trong một Hoạt động trong thời gian chạy. Tôi có mã này ->android: tự động thay đổi biểu tượng FAB (Floating Action Button) từ mã

FloatingActionButton fab = (FloatingActionButton) findViewById(R.id.fabMainActivity); 

Tôi biết điều này có thể sử dụng fab.setBackgroundDrawable(); nhưng tôi là người mới đến android, không hiểu cách thực hiện việc này.

Mọi trợ giúp sẽ được đánh giá cao.

Cảm ơn

+0

Bạn đã thử 'fab. setBackground'? –

+0

Tôi không thể làm điều đó .. vì nó mong đợi một drawable .. và idk làm thế nào để thực hiện một drawable ?? –

+4

Bạn đã thêm biểu tượng vào thư mục Drawable chưa? nếu có thì chỉ cần vượt qua 'R.drawable. 'to' phương thức setBackground' nếu không thì trước tiên hãy thêm biểu tượng vào thư mục có thể vẽ được rồi thực hiện tương tự –

Trả lời

51

Thay đổi nguồn FloatingActionButton:

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) { 
      floatingActionButton.setImageDrawable(getResources().getDrawable(R.drawable.ic_full_sad, context.getTheme())); 
     } else { 
      floatingActionButton.setImageDrawable(getResources().getDrawable(R.drawable.ic_full_sad)); 
    } 

Điều này có thể được thay thế bằng đoạn mã sau từ thư viện hỗ trợ thay vì:

floatingActionButton.setImageDrawable(ContextCompat.getDrawable(getContext(), R.drawable.ic_full_sad)); 
+1

Cố gắng tránh' getApplicationContext' càng nhiều càng tốt – zozelfelfo

+0

@zozelfelfo tại sao vậy? – SaKet

+5

Điều đó không nhất thiết phải đúng. Nó phụ thuộc vào những gì bạn đang cố gắng thực hiện. Ngữ cảnh hoạt động có thể gây rò rỉ bộ nhớ tùy thuộc vào cách bạn đang sử dụng nó. Thông thường đó là bối cảnh hoạt động đó là phiền hà vì nó có thể gây rò rỉ bộ nhớ. Nếu hoạt động chết và một đối tượng khác có tham chiếu đến hoạt động đó qua ngữ cảnh thì nó không thể là rác được thu thập. Tuy nhiên, có một số trường hợp khi bạn muốn sử dụng ngữ cảnh hoạt động trong ngữ cảnh ứng dụng, [ex] (http://developer.android.com/reference/android/content/ContextWrapper.html#getApplicationContext%28%29). –

12

Hoặc bạn sử dụng Thư viện hỗ trợ:

floatingActionButton.setImageDrawable(ContextCompat.getDrawable(getContext(), R.drawable.ic_full_sad)); 
+1

Đây là cách chính xác. – Iqbal

10

Nếu bạn đang sử dụng Thư viện hỗ trợ:

floatingActionButton.setImageResource(R.drawable.icon_name) 
+0

Đây phải là câu trả lời được đánh dấu vì việc sử dụng này có thể sử dụng vectơ –

0

Những gì tôi đang sử dụng như sau,

FloatingActionButton fab = (FloatingActionButton) findViewById(R.id.fab_btn); 

// State 1 -on 

fab.setImageDrawable(ContextCompat.getDrawable(getActivity(), R.drawable.fab_on)); 

// State 2 - off 

fab.setImageDrawable(ContextCompat.getDrawable(getActivity(), R.drawable.fab_off)); 
0

Giả sử rằng bạn sẽ sử dụng ic_arrow_forward.png hình ảnh làm nền của fab của bạn:

fab.setImageResource(R.mipmap.ic_arrow_forward);

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