2009-12-01 23 views
11

Tôi hiện đang gặp khó khăn khi gọi tới getApplicationContext().setTheme() trong một hoạt động, tôi chỉ muốn áp dụng tài nguyên chủ đề trong phạm vi ứng dụng thay vì phạm vi hoạt động theo kiểu mã, nhưng vấn đề là điều này không hoạt động bất cứ ai giải thích cho điều này.Tại sao getApplicationContext(). SetTheme() trong một Activity không hoạt động?

Cảm ơn rất nhiều!

Ông là mã bộ xương:

public class StartUp extends Activity { 
@Override 
public void onCreate(Bundle savedInstanceState) { 
    /* 
    * setTheme(android.R.style.Theme_Black_NoTitleBar_Fullscreen); 
    * //that works! 
    */ 
     this.getApplicationContext().setTheme(
      android.R.style.Theme_Black_NoTitleBar_Fullscreen); 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.main); 
    } 
} 

Trả lời

10

Tôi đã gặp phải vấn đề tương tự trước đây và không tìm cách sửa lỗi này. Chỉ có Chúa mới biết tại sao, nhưng tôi thậm chí còn thấy các kỹ sư khuôn khổ của Android (tôi tin rằng đó là Dianne Hackborn) nói rằng việc thiết lập các chủ đề như thế này không được khuyến khích.

Đặt chủ đề cho Hoạt động của bạn trong Tệp kê khai để thay thế và nó sẽ hoạt động.

+3

Đây là báo cáo lỗi: http: // code .google.com/p/android/issues/detail? id = 4394 – stealthcopter

2

Khi nào bạn gọi setTheme() trên bối cảnh ứng dụng của bạn? Nó phải được gọi trước khi khởi tạo bất kỳ khung nhìn nào.

+0

Cảm ơn bạn đã trả lời, tôi gọi phương thức này trước khi khởi tạo bất kỳ viwes nào, nhưng vẫn không hoạt động .. – user221778

+0

Nó làm việc cho tôi sau khi di chuyển setTheme đến trước setContentView – OldSchool4664

-2

Tôi không tự mình thử, nhưng nếu cần thiết để đặt chủ đề theo chương trình, điều tiếp theo tôi sẽ thử là lấy một lớp từ Ứng dụng và ghi đè lên phương thức onCreate như sau:

public class MyApplication extends android.app.Application { 
    @Override 
    public void onCreate() { 
     super.onCreate(); 
     setTheme(android.R.style.Theme_Black_NoTitleBar_Fullscreen); 

    } 
} 
11

bạn có thể sử dụng setTheme(..) trước khi gọi setContentView(...)super.oncreate() và nó sẽ làm việc tốt

+5

Tôi gọi trước setContentView và trước super.onCreaete nhưng nó vẫn không hoạt động. –

0

bạn có thể sử dụng setTheme(..) trước khi gọi setContentView(...)super.oncreate() và nó sẽ làm việc tốt

Nó cố định trong sdk 4.0 (có lẽ trước đó).

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