2012-09-26 32 views
5

Tôi đang viết một ứng dụng. Nó cần phải chạy trên hệ điều hành Android cũ là hữu ích. Tôi đã viết màn hình sở thích bằng cách sử dụng một PreferencesActivity mà populates với một tập tin options.xml có chứa PreferenceScreen. Nó không có menu con cho các sở thích (vì vậy PreferenceFragment không cung cấp các lợi ích thực sự).PreferenceActivity hoạt động bình thường trên Android 2.1, nhưng không phải 4.1 (đệm)

Trong Android 2.1 (2.2 và 2.3, chưa được thử nghiệm trên ICS chưa) màn hình hiển thị đúng như vậy trong cảnh quan: Eclair

Nhưng trên Jellybean, nó trông như thế này: Jellybean

Có vẻ khủng khiếp. Tôi không có gì được định nghĩa là bố cục, chỉ cần addPreferencesFromResource() tiêu chuẩn. Có ai biết nguyên nhân của việc này có thể là gì không? Hoặc một giải pháp?

My onCreate trông như thế này:

protected void onCreate(Bundle savedInstanceState) { // 
    super.onCreate(savedInstanceState); 
    Log.i(TAG, "Options Activity Loaded."); 
    setTitle(getString(R.string.optionsTitle)); 
    addPreferencesFromResource(R.xml.options); 
    setupListeners(); 
} 

Mọi thứ khác chỉ làm cho đối tượng Sở thích và gán phương pháp để làm những thứ khi họ nhận được nhấp vào. Tôi không muốn tạo mã cho cả PreferenceFragment và PreferenceActivity. Tôi không hiểu cách Google mong đợi chúng tôi sử dụng API phân đoạn nếu phiên bản thị trường lớn nhất không có API đó và họ sẽ không thêm nó vào lib tương thích.

+0

Tôi cảm thấy như các màn hình tùy chọn ICS/JB có phần đệm đó. Tôi không thực sự chắc chắn có một cách để loại bỏ nó, nhưng tôi không làm cho một câu trả lời dứt khoát (đó là lý do tại sao tôi chỉ nhận xét.) – Jwc24678

+0

Tôi sẽ chỉ ném ra rằng ['addPreferencesFromResource()'] (http://developer.android.com/reference/android/preference/PreferenceActivity.html#addPreferencesFromResource(int)) không còn được dùng nữa. Có thể sử dụng các phương pháp vẫn được hỗ trợ (chi tiết trong trang tài liệu đó) trên 4.0+ sẽ mang lại cho bạn kết quả phù hợp. – Eric

+0

Hy vọng để tránh những ... Nhưng có thể phải đầu hàng và làm điều đó anyways. Tôi không hiểu tại sao họ không làm cho nó hoàn toàn tương thích. Không có lý do cho việc đệm. – Mgamerz

Trả lời

1

Ứng dụng của bạn có thể hỗ trợ cả chức năng cũ và mới cho SharedPreferences. Bạn có thể cung cấp một lớp cho các sở thích cũ và một lớp cho các tùy chọn mới. Nó không còn nhiều mã nữa. Bạn có thể làm cho ứng dụng của mình tương thích ngược như sau:

Class spc = Build.VERSION_SDK_INT < Build.VERSION_CODES.HONEYCOMB ? 
    oldPreferenceActivity.class : newFragmentPreferenceActivity.class; 

Intent i = new Intent (this, spc); 
startActivityForResult (i, SHOW_PREFERENCES); 
Các vấn đề liên quan