2012-11-29 44 views
8

Tôi đã thử các cách khác nhau để có kích thước màn hình của thiết bị nhưng nó luôn trả về cho tôi kích thước sai (791x480 thay vì 854x480), có thể là do thanh điều hướng. Thiết bị của tôi hiện đang chạy Jellybean 4.1.1.Android: Cách nhận kích thước màn hình thực của thiết bị?

tôi đã cố gắng:

Display display = getWindowManager().getDefaultDisplay(); 
Point size = new Point(); 
display.getSize(size); 
OpenGLRenderer.widthScreen = size.x; 
OpenGLRenderer.heightScreen = size.y; 

Và:

DisplayMetrics dm = new DisplayMetrics(); 
getWindowManager().getDefaultDisplay().getMetrics(dm); 
String resolution = dm.widthPixels + "x" + dm.heightPixels; 

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

setContentView(mGLSurfaceView); 
mGLSurfaceView.setSystemUiVisibility(View.SYSTEM_UI_FLAG_HIDE_NAVIGATION); 

tôi nhận thấy rằng trong logcat kích thước phù hợp được trả lại:

01-01 03:05:06.967: I/InputReader(1961): 
    Device reconfigured: id=8, name='cyttsp-spi', 
    surface size is now 480x854, mode is 1 

Trong AndroidManifest tôi:

uses-sdk android:minSdkVersion="8" android:targetSdkVersion="16" 

tôi đã sử dụng:

Tại sao tôi không phải là một để có được kích thước thật (480x854)? Hoặc làm cách nào tôi có thể sử dụng bề mặt được trả về bởi "Thiết bị được định cấu hình lại"?

+1

thử getRealMetrics http://developer.android.com/reference/android/view/Display.html#getRealMetrics(android.util.DisplayMetrics) – Jameo

+0

Tôi đang bối rối. Bạn đang hỏi làm thế nào để có được kích thước vật lý của thiết bị, sau đó bạn nói rằng bạn nhận được kích thước trừ thanh điều hướng. Sau đó, bạn nói rằng bạn có kích thước vật lý của thiết bị. Vấn đề của bạn chính xác ở đâu? – DeeV

+0

@deev Bạn nói đúng, tôi đang hỏi làm thế nào để có được kích thước vật lý của thiết bị, tôi chỉ giả sử rằng kích thước được trả lại cho tôi là một trừ đi thanh điều hướng. Tôi yêu cầu cách viết mã sẽ cung cấp kích thước thực cho bất kỳ thiết bị nào. – Trois

Trả lời

5

thử gọi

display.getRealSize(); 

SỰ TỪ BỎ: tôi không nhận ra điều này, nhưng điều này sẽ chỉ làm việc cho API 17 (Android 4.2/Jellybean) trở lên.

+2

Bắt đầu từ phiên bản 4.2 – W55tKQbuRu28Q4xv

10

Hãy thử điều này

final DisplayMetrics metrics = new DisplayMetrics(); 
    Display display = getWindowManager().getDefaultDisplay();  
    Method mGetRawH = null,mGetRawW = null; 

try { 

    // For JellyBeans and onward 
    if(android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.JELLY_BEAN){ 

     display.getRealMetrics(metrics); 
     realWidth = metrics.widthPixels; 
     realHeight = metrics.heightPixels; 
    } 
    else{ 
    // Below Jellybeans you can use reflection method 

     mGetRawH = Display.class.getMethod("getRawHeight"); 
     mGetRawW = Display.class.getMethod("getRawWidth"); 

     try { 
      realWidth = (Integer) mGetRawW.invoke(display); 
      realHeight = (Integer) mGetRawH.invoke(display); 
     } catch (IllegalArgumentException e) { 
      // TODO Auto-generated catch block 
      e.printStackTrace(); 
     } catch (IllegalAccessException e) { 
      // TODO Auto-generated catch block 
      e.printStackTrace(); 
     } catch (InvocationTargetException e) { 
      // TODO Auto-generated catch block 
      e.printStackTrace(); 
     } 
    } 
+1

không nên là JELLY_BEAN_MR1 và không phải là JELLY_BEAN>> 17? – ThomasRS

+0

Tôi đồng ý với Thomas, nó phải là JELLY_BEAN_MR1. – Ethan

0

tôi đã phải đối mặt với cùng một vấn đề trên một máy tính bảng Android 3.2. Tôi đã thử nghiệm cả getRealSize và getDisplayMetrics. Họ dự kiến ​​sẽ sụp đổ vì họ có nghĩa là để có sẵn trên API 17. Nhưng lạ getDisplayMetrics không sụp đổ trên 3.2 của tôi và trả về kích thước chính xác. getRealSize bị treo.

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