2012-10-08 26 views
40

Vì vậy, tôi có một vấn đề nhỏ, tôi đang viết một chức năng cần phải gửi chiều rộng màn hình đến máy chủ. Tôi có tất cả để hoạt động và tôi sử dụng:Có an toàn khi sử dụng .getWidth trên Màn hình mặc dù nó không được chấp nhận

Display display = getWindowManager().getDefaultDisplay(); 
int width = display.getWidth(); 

để có chiều rộng. Tuy nhiên .getWidht() chức năng bị phản đối, và nói rằng u cần phải sử dụng:

Point size = new Point(); 
display.getSize(size); 

Nhưng chức năng đó chỉ là avaible cho cấp api 13 trở lên, và sdk tối thiểu của tôi là 8. Vì vậy, những gì tôi có thể làm gì? Có an toàn không nếu tôi ở lại với getWidth? Tại sao thêm chức năng mới và không làm cho chúng tương thích ngược?

Trả lời

90

Có thể phương pháp này sẽ hữu ích:

DisplayMetrics displaymetrics = new DisplayMetrics(); 
mContext.getWindowManager().getDefaultDisplay().getMetrics(displaymetrics); 
int screenWidth = displaymetrics.widthPixels; 
int screenHeight = displaymetrics.heightPixels; 
10

Bạn có thể kiểm tra mức độ API trong thời gian chạy, và chọn để sử dụng, ví dụ:

final int version = android.os.Build.VERSION.SDK_INT; 
final int width; 
if (version >= 13) 
{ 
    Point size = new Point(); 
    display.getSize(size); 
    width = size.x; 
} 
else 
{ 
    Display display = getWindowManager().getDefaultDisplay(); 
    width = display.getWidth(); 
} 
+0

hmm âm thanh ok, nhưng ăn cắp là tốt nếu tôi chỉ sử dụng getwidth? – gabrjan

+0

Có, nếu nó không có sẵn trên các phiên bản cũ thì bạn không có tùy chọn. – nmw

+1

bạn có thể làm đủ tốt với getWidth() trong hầu hết các trường hợp. – slezadav

4

Nếu bạn muốn trở thành đúng, sử dụng phương pháp này>

  int sdk = android.os.Build.VERSION.SDK_INT; 
      if (sdk < android.os.Build.VERSION.RELEASE) { 
       Display display = getWindowManager().getDefaultDisplay(); 
       int width = display.getWidth(); 

      } else { 
       Point size = new Point(); 
       display.getSize(size); 

      } 
+2

Bạn đang so sánh một int với một String (VERSION.RELEASE) ở đó. – nmw

+3

Nếu bạn muốn chính xác, bạn sẽ không so sánh một chuỗi với một chuỗi và bạn sẽ không lưu trữ int trong biến cục bộ không cuối cùng, bạn thậm chí không cần biến đó, tại sao lưu trữ nó ở vị trí thứ nhất. ;) Bạn có thể muốn 'if (Build.VERSION.SDK_INT> = Build.VERSION_CODES.HONEYCOMB_MR2) {' –

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