6

thể trùng lặp:
How to deal with deprecated classes in Android to keep compatibilityLàm cách nào để tránh các phương pháp không được chấp nhận và duy trì khả năng tương thích ngược?

Tôi chạy vào phản Display.getWidth() phương pháp và thấy rằng nó đã được thay thế bằng android.view.getSize(). Tuy nhiên getSize() chỉ khả dụng vì API 13 và View dường như không được đưa vào thư viện hỗ trợ Android V4.

Vì vậy, nếu tôi muốn tránh các cuộc gọi không được chấp nhận, làm cách nào tôi có thể thực hiện việc này mà không cần duy trì các dự án/công trình khác nhau cho các cấp API khác nhau.

+0

Đây là giải pháp của bạn http://stackoverflow.com/a/10165103/614807 –

+0

@ChiragRaval không phải là giải pháp cho câu hỏi này. Câu trả lời đó chỉ ra rằng nó là "okay" để sử dụng các phương pháp không được chấp nhận. –

Trả lời

4

Cho một đối tượng tên là Displaydisplay, điều này sẽ làm việc:

int width=-1; 

if (Build.VERSION.SDK_INT>=Build.VERSION_CODES.HONEYCOMB_MR2) { 
    Point size=new Point(); 
    size=display.getSize(size); 
    width=size.x; 
} 
else { 
    width=display.getWidth(); 
} 

IOW, sử dụng Build.VERSION.SDK_INT chi nhánh giữa "trước" và "sau" vụ cho nơi một API mới được giới thiệu.

Điều này sẽ yêu cầu mục tiêu xây dựng của bạn (Dự án> Thuộc tính> Android trong Eclipse) được đặt thành Cấp API 13+, vì vậy bạn có thể gọi getSize().

+1

BTW, tôi giả sử rằng chiều rộng là 'x' trong một' điểm' - tài liệu được quyết định mờ về điều này, um, điểm. :-) – CommonsWare

2

Có một nhà phát triển Android chính thức lớp Creating Backward-Compatible UIs:

lớp này cho thấy làm thế nào để sử dụng các thành phần giao diện người dùng và API có sẵn trong phiên bản mới của Android theo một cách tương thích ngược, đảm bảo rằng ứng dụng của bạn vẫn chạy trên các phiên bản trước của nền tảng.

Họ chủ trương sử dụng giao diện Java cho các thư viện không được truyền lại để có giải pháp hướng đối tượng hơn. Sau đó, bạn mở rộng chúng thành hai lớp cụ thể: một lớp cung cấp hành vi thay thế cho các nền tảng không được hỗ trợ và một phiên bản gọi API thực tế cho các nền tảng được hỗ trợ.

Sau đó, có một lớp nhà máy khởi tạo lớp chính xác bằng cách kiểm tra nền tảng hiện tại dựa trên phạm vi nền tảng được hỗ trợ. Cuối cùng mặc dù, nó sôi xuống một điều kiện như if (Build.VERSION.SDK_INT >= HONEYCOMB_MR2).

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