2012-11-06 15 views
6

Khi tôi chạy ứng dụng Android của tôi Tôi gọi một phương thức để kiểm tra xem các ứng dụng đang được chạy trên một tablet sử dụng:Setting Theme Programmactically Nguyên nhân nền đen

public boolean isTablet(Context context){ 
    boolean xlarge = ((context.getResources().getConfiguration().screenLayout & Configuration.SCREENLAYOUT_SIZE_MASK) == 4); 
    boolean large = ((context.getResources().getConfiguration().screenLayout & Configuration.SCREENLAYOUT_SIZE_MASK)== Configuration.SCREENLAYOUT_SIZE_MASK); 
    return(xlarge || large); 
} 

nếu phương pháp này trả về true (tức là đáp ứng thiết bị một trong những điều kiện này)

tôi đặt chủ đề của tôi đến một chủ đề Dialog qua:

setTheme(R.style.MyTheme); 

nơi MyTheme là một chủ đề mà được thừa hưởng từ cha mẹ 01.

Logic này hoạt động tốt tuy nhiên nó mang lại cho tôi hiệu ứng kỳ lạ trong nền. Mục đích gọi là hoàn toàn bôi đen, trong khi nếu tôi chỉ đặt chủ đề trong tệp kê khai thì nền chỉ hơi xám.

Update - Mã thêm

private Context mClassContext = this; 
@Override 
public void onCreate(Bundle savedInstanceState){ 
    if(isTablet(mClassContext)){ 
     setTheme(R.style.MyTheme); 
    } 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.myLayout); 
} 

Làm thế nào để tái tạo này?

+0

Bạn thực hiện 'setTheme' trước' SetContentView() '? – kaderud

+0

vâng, tôi có nên chuyển sang sau này không? Tôi đang gửi 'onCreate()' của tôi bây giờ –

+0

tôi đã chuyển mã sang sau 'setContentView()' và nó không đặt chủ đề của tôi. Tôi đã thử điều này trước đây. Nếu bạn muốn chủ đề được thiết lập, bạn phải thực hiện nó trước khi gọi 'setContentView()'. Tôi chỉ không hiểu lý do tại sao nền hoàn toàn bị bôi đen. –

Trả lời

10

Tôi dường như đã tìm thấy câu trả lời cho câu hỏi của riêng mình.

Để tránh những nền đen:

Trong bộ manifest android mọi hoạt động của bạn mà có thể là các hộp thoại (nếu nó là một tablet) với chủ đề thoại:

sau đó trong onCreate add trường hợp này để thay đổi nó cho các thiết bị không phải máy tính bảng (ví dụ: điện thoại)

if(isTablet(mContext)){ 
setTheme(R.style.myDialogTheme);} 
else{ 
    setTheme(R.style.MyTheme); 
}