android屏幕分辨率 的获取
谈到android屏幕分辨率,大家都知道,但是怎么正确的获取屏幕的分辨率呢?android2.2\2.3\4.0\4.1使用的方法一样吗?
答案是否定的。事物是发展变化的,android也不例外,android2.2、2.3因为标配是有触摸屏按钮的,也就是说触摸屏上BACK、HOME、MEAN是在触摸屏分辨率识别范围之外的。但是在android4.0以后,已经取消了,开始使用软件按钮了,在屏幕的下方会占掉一定的高度,因此使用同样的方法去取屏幕分辨率,可能得到的值会不大一样。
笔者使用的android4.0平台,屏幕分辨率是1280X800写了一个能稍微智能一点,能正确获取屏幕分辨率的方法,主要修改代码:
[Java] 纯文本查看 复制代码 ?
01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 | @@ - 26 , 12 + 26 , 17 @@ import android.app.ProgressDialog; import android.app.AlertDialog; import android.content.DialogInterface; import android.util.Log; + import android.util.DisplayMetrics; + import java.lang.reflect.Method; + import android.os.Build; + import android.view.Display; public class MainActivity extends Activity { public Button Btn_Music, Btn_Movie, Btn_DVD, Btn_CMMB; public TextView src_title; private static final boolean DEBUG = true ; private int all_src, cur_src; + private int screen_w, screen_h; public static SerialService localService = null ; @@ - 182 , 6 + 187 , 8 @@ public class MainActivity extends Activity { setContentView(R.layout.src_main); + getDisplayScreenResolution(); + connected = 0 ; connect_retry_cnt = 0 ; mConnectCheckTask = new TimerTask() { @@ - 303 , 6 + 310 , 47 @@ public class MainActivity extends Activity { } } + public int getDisplayScreenResolution() + { + int ver = Build.VERSION.SDK_INT; + + DisplayMetrics dm = new DisplayMetrics(); + android.view.Display display = getWindowManager().getDefaultDisplay(); + display.getMetrics(dm); + + screen_w = dm.widthPixels; + + Log.d(TAG, "Run1 first get resolution:" +dm.widthPixels+ " * " +dm.heightPixels+ ", ver " +ver); + if (ver < 13 ) + { + screen_h = dm.heightPixels; + } + else if (ver == 13 ) + { + try { + Method mt = display.getClass().getMethod( "getRealHeight" ); + screen_h = (Integer) mt.invoke(display); + } catch (Exception e) { + e.printStackTrace(); + } + } + else if (ver > 13 ) + { + try { + Method mt = display.getClass().getMethod( "getRawHeight" ); + screen_h = (Integer) mt.invoke(display); + + } catch (Exception e) { + e.printStackTrace(); + } + } + + Log.d(TAG, "Run2 Calibration resolution:" +screen_w+ " * " +screen_h); + + return 0 ; + } + + void HideSrcAll() { //src_title.setVisibility(View.GONE); Btn_Music.setVisibility(View.GONE); |
运行打印如下:
[Java] 纯文本查看 复制代码 ?
1 2 3 4 5 6 7 8 | 01 - 01 09 : 37 : 40.989 I/ActivityManager( 174 ): Start proc com.jeavox.Serial for activity com.jeavox.Serial/.MainActivity: pid= 807 uid= 10036 gids={} 01 - 01 09 : 37 : 41.059 D/OpenGLRenderer( 361 ): Flushing caches (mode 1 ) 01 - 01 09 : 37 : 41.189 D/OpenGLRenderer( 361 ): Flushing caches (mode 0 ) 01 - 01 09 : 37 : 41.209 D/MainActivity( 807 ): Run1 first get resolution: 1280 * 740 , ver 15 01 - 01 09 : 37 : 41.209 D/MainActivity( 807 ): Run2 Calibration resolution: 1280 * 800 01 - 01 09 : 37 : 41.279 D/ViewRootImpl( 807 ): pckname = com.jeavox.Serial 01 - 01 09 : 37 : 41.299 D/ViewRootImpl( 807 ): pckname = com.jeavox.Serial 01 - 01 09 : 37 : 41.319 E/SerialService( 807 ): ###################->>>>>> service create <<<<<<< |
在android4.0以前,display.getMetrics(dm);就能够获取正确的屏幕分辨率,4.0、4.1的就不行。所以在Run1 first get resolution:1280 * 740,而使用getRawHeight新方法修正后能得到正确的分辨率Run2 Calibration resolution:1280 * 800 。在android4.0 SDK自带的Setting apk里ScreenAdaption.java里面也有获取屏幕分辨率的接口:主要代码如下,大同小异,
[Java] 纯文本查看 复制代码 ?
1 2 3 4 | WindowManager wm = (WindowManager)getSystemService(WINDOW_SERVICE); android.view.Display display = wm.getDefaultDisplay(); int width = display.getRawWidth(); int height = display.getRawHeight(); |
过使用笔者提供的接口,可以正确的获取不同android版本的设备获取到正确的屏幕分辨率,难度不是很大,方法简单,其实都是android现成的东西,但是对还不了解的同学来说还是很有好处的。
转自: http://blog.csdn.net/sundesheng125/article/details/8314945
可以使用的代码应该是这些:
private int screen_w, screen_h;
public int getDisplayScreenResolution(){
int ver = Build.VERSION.SDK_INT;
DisplayMetrics dm = new DisplayMetrics();
Display display = getWindowManager().getDefaultDisplay();
display.getMetrics(dm);
screen_w= dm.widthPixels;
Log.d("TAG", "Run1 first get resolution:"+dm.widthPixels+" * "+dm.heightPixels+", ver "+ver);
if (ver < 13)
{
screen_h = dm.heightPixels;
}
else if (ver == 13)
{
try {
Method mt = display.getClass().getMethod("getRealHeight");
screen_h = (Integer) mt.invoke(display);
} catch (Exception e) {
e.printStackTrace();
}
}
else if (ver > 13)
{
try {
Method mt = display.getClass().getMethod("getRawHeight");
screen_h = (Integer) mt.invoke(display);
} catch (Exception e) {
e.printStackTrace();
}
}
Log.d("TAG", "Run2 Calibrationresolution:"+screen_w+" * "+screen_h);
return 0;
}
http://www.apkbus.com/android-85719-1-1.html
http://www.2cto.com/kf/201212/177347.html
更多相关文章
- android 围绕中心旋转动画
- android studio中常用的导入jar包以及添加远程依赖的方式
- android widget 开发实例
- android开发之Google工程师多图详解Android架构
- Flutter——踩坑之旅(现有Android项目和现有iOS项目引入同一个Flu
- 使用kotlin编写Android第一个Activity
- Android(安卓)TabActivity Essentials
- Android中几种常见的定时刷新方式
- android lint 是什么