2012-06-21 22 views
9

Tôi muốn setTheme đến một hoạt động trong thời gian chạy, tôi đã tìm kiếm một số giải pháp của google. ai đó nói gọi setTheme trước khi công trình onCreate và setContentView thể, phần mã nhưLàm thế nào để setTheme thành một hoạt động trong thời gian chạy? Nó không hoạt động gọi setTheme trước khi onCreate và setContentView

public void onCreate(Bundle savedInstanceState) { 
    setTheme(android.R.style.Theme_Translucent_NoTitleBar); 
    super.onCreate(savedInstanceState); 
    ... 
    setContentView(...) 
} 

nhưng nó không hoạt động, tôi muốn biết, liệu có một giải pháp có thể setTheme để hoạt động?

+1

Chỉ cần cố gắng này - thiết lập chủ đề của bạn sau khi 'super.onCreate (savedInstanceState); 'và trước khi' setContentView (...) ' – Praveenkumar

+0

@hermanbrain: Luôn gọi' siêu .onCreate (...) 'đầu tiên trong phương thức' onCreate (...) 'của bạn trừ khi bạn định thay đổi' Bundle' mà bạn truyền cho nó. Như SpK nói, gọi 'setTheme (...)' sau khi bạn gọi 'super.onCreate (...)'. – Squonk

+0

Cùng một vấn đề, tôi thậm chí đã cố gắng đặt nó như praveen nói nhưng không thành công. Tôi đã tạo một chủ đề tùy chỉnh trong style.xml và thêm dòng setTheme (R.style.MyCustomTheme); tôi có cần làm gì khác không? –

Trả lời

11

Chỉ cần cố gắng này - thiết lập chủ đề của bạn sau khi super.onCreate(savedInstanceState); và trước setContentView(...)

Giống như bên dưới mã -

public void onCreate(Bundle savedInstanceState) 
{ 
    super.onCreate(savedInstanceState); 
    setTheme(android.R.style.Theme_Translucent_NoTitleBar); // Set here 
    setContentView(...) 
} 
+2

tôi đã thử điều này, nhưng nó cho thấy nền đen, bạn có thể giúp tôi. – mdDroid

4

Trên thực tế điều này chỉ làm việc cho tôi nếu tôi đặt nó trước khi gọi super.onCreate(savedInstanceState);

public void onCreate(Bundle savedInstanceState) 
{ 
    final int themeRes = getIntent().getIntExtra(EXTRA_THEME_ID, 0); 
    if (themeRes != 0) setTheme(themeRes); 
    super.onCreate(savedInstanceState); 
    //ect... 
} 
2
setContentView(...); 
setTheme(R.style.MyTheme); 
setContentView(...); 

Nó phải hoạt động tốt ..

Thông tin thêm về Chủ đề, đọc này http://entertheinfinity.blogspot.in/2016/06/designing-android-interface-themes.html

+0

Vui lòng giải thích tại sao mã của bạn giải quyết vấn đề của OP. –

+0

Tôi sử dụng kỹ thuật này để thay đổi chủ đề về Hoạt động bắt đầu của ứng dụng. Đó là bởi vì trong onCreate không có View (nghĩa là không có thanh tác vụ nào được nạp hoặc bất kỳ khung nhìn nào trong hoạt động), trong đó chủ đề có thể được thiết lập. Đặt chủ đề trước setContentView() giống như Đặt chủ đề thành chế độ xem rỗng. Tương tự của tôi. Bạn luôn quyết định. Cảm ơn – Umesh

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