Để trả lời đúng câu hỏi: Sử dụng không hợp lệ ():
công khai void voidate () Kể từ: API Cấp 1
Vô hiệu toàn bộ khung nhìn. Nếu chế độ xem hiển thị, onDraw (Canvas) sẽ được gọi tại một số điểm trong tương lai. Điều này phải được gọi từ một chủ đề UI. Để gọi từ một luồng không phải UI, hãy gọi postInvalidate ().
ViewGroup vg = findViewById (R.id.mainLayout);
vg.invalidate();
Bây giờ, khi Hoạt động trở lại, nó làm cho mọi Chế độ xem tự vẽ. Không cần gọi để vô hiệu hóa (). Để áp dụng chủ đề, hãy đảm bảo bạn thực hiện trước khi bất kỳ Chế độ xem nào được vẽ, tức là trước khisetContentView(R.layout.mainscreen);
công khai void setTheme (int Resid) Kể từ: API Cấp 1
Đặt chủ đề cơ sở cho bối cảnh này. Lưu ý rằng điều này nên được gọi trước khi bất kỳ chế độ xem nào được khởi tạo trong Ngữ cảnh (ví dụ trước khi gọi setContentView (Chế độ xem) hoặc lạm phát (int, Viewgroup)).
Tham chiếu tài liệu API có tại đây: http://developer.android.com/reference/android/view/ContextThemeWrapper.html#setTheme%28int%29
Vì phương thức onDraw () hoạt động trên các Chế độ xem đã được khởi tạo, setTheme sẽ không hoạt động. Bản thân tôi không có kinh nghiệm về các chủ đề, nhưng hai lựa chọn thay thế tôi có thể nghĩ là:
- gọi setTheme trong onCreate () thay vào đó, hoặc
- làm lại setContentView (R.layout.mainscreen); để buộc tái hiện tất cả các bố trí.