2012-07-10 35 views
9

thể trùng lặp:
How to change current Theme at runtime in AndroidThay đổi và áp dụng theme trong thời gian chạy trong Android

Tôi có một ứng dụng Android mà tôi cho phép người dùng chuyển đổi giữa các giao diện khi chạy. Chuyển đổi một chủ đề dễ dàng nhưng the theme isn't applied until the activity is recreated. Tôi đã tìm thấy một cách để apply the theme to current activity nhưng nếu người dùng nhấn nút quay lại, các màn hình trước đó vẫn có chủ đề cũ. Làm thế nào tôi có thể thay đổi chủ đề cho các hoạt động đó? Ví dụ về ứng dụng hỗ trợ nó: Tasks Free

Trả lời

4

Chỉ cần một gợi ý Tôi cho rằng:

Trước finish(); Gọi

setResult(AnIntegerThatNotifiesThePreviousActivitiesToChangeTheme); 

Bây giờ trong tất cả các hoạt động của bạn, thực hiện onActivityResult

protected void onActivityResult(int request, int result, Intent data) { 
    if(result == AnIntegerThatNotifiesThePreviousActivitiesToChangeTheme) 
    { 
     //update the current theme 
    } 
} 

Một giải pháp khác (Tốt hơn):

Thực hiện một lớp mà tiết kiệm với chủ đề:

public class CurrentThemeHolder { 
    private CurrentThemeHolder() { 
    } 
    private static instance; 
    public static getInstance() { 
     if(instance == null) 
      return new CurrentThemeHolder(); 
     else 
      return instance; 
    } 
    private int mTheme; //identifier of the theme 
    public getTheme() { 
     return mTheme; 
    } 
    public setTheme(int newTheme){ 
     mTheme = newTheme; 
    } 
} 

Bây giờ chúng ta tất cả các hoạt động ur mở rộng ThemeActivity này:

public class ThemeActivity extends Activity { 
    private int mTheme; 
    protected void onResume() { 
     if(mTheme != CurrentThemeHolder.getInstance().getTheme()) { 
      //do what you should do to set the theme 
      mTheme = CurrentThemeHolder.getInstance().getTheme(); 
      //everytime you set the theme save it 
      //this maybe should be done in onCreate() 
     } 
    } 
} 
+0

Xin chào sherif, tôi muốn biết từ bạn nếu có bất kỳ giải pháp nào để lấy mã màu từ web và tôi có thể thay đổi màu của tất cả các nút mà không cần đến tất cả các nút cụ thể và áp dụng màu BackGround bất kỳ giải pháp bằng cách sử dụng chủ đề hoặc phong cách? Vui lòng chia sẻ bất kỳ đề xuất nào bạn có. – MKJParekh

+0

Bạn có màu sắc vô hạn không? hoặc chỉ là một bộ màu giới hạn? –

+0

Tôi có giới hạn 20 màu để nói, nhưng 20 màu đó được tải xuống từ máy chủ để có thể thay đổi từ lần này sang lần khác, với màu ngắn khoảng 15-20 (không sửa) và các mã màu đó cũng không được sửa. Một trong những người dùng đã đề xuất sử dụng CustomViews http://stackoverflow.com/questions/22529646/android-app-apply-color-theme-dynamically-at-runtime – MKJParekh

5

động trong thời gian chạy, gọi setTheme() trong onCreate của hoạt động của bạn() phương pháp , trước khi gọi setContentView(). Để thay đổi chủ đề, bạn chỉ cần khởi động lại hoạt động của mình.

Xin xem this file..!

Cũng Muốn thấy thisthis ... Hope this helps ...!

+1

Khởi động lại hoạt động cho hoạt động hiện tại nhưng khi người dùng nhấp lại nút hoạt động trước đó vẫn có chủ đề cũ. Điều này là do onCreate không được gọi khi người dùng quay trở lại vì vậy tôi không thể đặt chủ đề. – Giorgi

+0

Bạn muốn thiết lập chủ đề vĩnh viễn sau đó giống như hình nền sống làm cho một ứng dụng sau đó trong thiết lập bạn có thể thêm phong cách khác nhau ..! @Giorgi –

+3

Điều này không trả lời được câu hỏi. Hoạt động khởi động lại hoạt động đối với hoạt động hiện được hiển thị nhưng làm cách nào để áp dụng hoạt động đó cho các hoạt động khác khi người dùng nhấp lại? – Giorgi

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