谈到android屏幕分辨率,大家都知道,但是怎么正确的获取屏幕的分辨率呢?android2.22.34.04.1使用的方法一样吗?
答案是否定的。事物是发展变化的,android也不例外,android2.2、2.3因为标配是有触摸屏按钮的,也就是说触摸屏上BACK、HOME、MEAN是在触摸屏分辨率识别范围之外的。但是在android4.0以后,已经取消了,开始使用软件按钮了,在屏幕的下方会占掉一定的高度,因此使用同样的方法去取屏幕分辨率,可能得到的值会不大一样。
笔者使用的android4.0平台,屏幕分辨率是1280X800写了一个能稍微智能一点,能正确获取屏幕分辨率的方法,主要修改代码:
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); |
运行打印如下:
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里面也有获取屏幕分辨率的接口:主要代码如下,大同小异,
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 Calibration resolution:"+screen_w+" * "+screen_h);
return 0;
}
http://www.apkbus.com/android-85719-1-1.html
http://www.2cto.com/kf/201212/177347.html