2011-12-19 29 views
11

Thiết bị với Ice Cream Sandwich có thể sử dụng các phím mềm trên màn hình và điều này có nghĩa là một số thuộc tính màn hình được thực hiện bằng các phím này. Tôi cần để có được độ phân giải màn hình thực sự, và không phải là độ phân giải trừ đi không gian được thực hiện bởi các phím mềm.Nhận độ phân giải màn hình thực trên thiết bị Ice Cream Sandwich

Tôi đã thử những điều sau đây, nhưng không phải công trình:

Display display = getWindowManager().getDefaultDisplay(); 
int width = display.getWidth(); 
int height = display.getHeight(); 
Log.d("SCREEN RES", "Width: " + width + ". Height: " + height); 

DisplayMetrics metrics = new DisplayMetrics(); 
getWindowManager().getDefaultDisplay().getMetrics(metrics); 
height = metrics.heightPixels; 
width = metrics.widthPixels; 
Log.d("SCREEN RES", "Width: " + width + ". Height: " + height); 

Dưới đây là kết quả:

12-19 20:18:42.012: D/SCREEN RES(20752): Width: 1196. Height: 720 
12-19 20:18:42.012: D/SCREEN RES(20752): Width: 1196. Height: 720 

Độ phân giải màn hình thật là 1280 x 720 pixel, không phải 1196 x 720 pixel.

Bất kỳ ý tưởng nào?

Sửa

Tôi đang sử dụng đoạn mã sau để làm cho ứng dụng toàn màn hình:

getWindow().getDecorView().setSystemUiVisibility(View.SYSTEM_UI_FLAG_HIDE_NAVIGATION); 
+0

Kết luận về cách nhận được độ phân giải thực: http://stackoverflow.com/questions/11824193/htc-sensation-real-resolution – thecr0w

Trả lời

9

API trả về số điểm ảnh một ứng dụng có thể sử dụng, vì vậy đây là kết quả chính xác .

+0

Nếu tôi đặt ứng dụng ở chế độ toàn màn hình như thế này? 'getWindow(). getDecorView(). setSystemUiVisibility (2);'. Điều này loại bỏ các phím mềm và cho phép tôi sử dụng toàn bộ màn hình và tất cả 1280 pixel chiều rộng. –

+0

Không thể chỉnh sửa nhận xét trước đó của tôi, nhưng 2 == 'View.SYSTEM_UI_FLAG_HIDE_NAVIGATION'. –

+9

@Romain Guy - Có những tình huống mà ứng dụng cần biết kích thước đầy đủ của màn hình, mặc dù nó có thể sử dụng ít hơn. Ví dụ: nhà thiết kế có thể muốn có thứ gì đó tập trung vào màn hình thiết bị chứ không phải trên không gian ứng dụng. Vì vậy, trong khi có nhu cầu cho một API trả về số lượng pixel mà ứng dụng có thể sử dụng, cũng cần có API trả về thứ nguyên màn hình thực. –

1

Từ mức API 17 (Android 4.2 Jelly Bean), bạn có thể nhận được kích thước thực sự của màn hình hiển thị như sau:

Point size = new Point(); 
Display display = getWindowManager().getDefaultDisplay(); 
display.getRealSize(size); 

size bây giờ sẽ chứa kích thước hiển thị dựa trên định hướng (ví dụ x sẽ. trái/phải tương đối so với người dùng, không phải thiết bị)

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