New UI-获取手机屏幕尺寸与分辨率,屏幕适配,横竖屏问题

New UI-获取手机屏幕尺寸与常用分辨率,屏幕适配,横竖屏问题

——转载请注明出处:coder-pig,欢迎转载,请勿用于商业用途!

小猪Android开发交流群已建立,欢迎大家加入,无论是新手,菜鸟,大神都可以,小猪一个人的

力量毕竟是有限的,写出来的东西肯定会有很多纰漏不足,欢迎大家指出,集思广益,让小猪的博文

更加的详尽,帮到更多的人,O(∩_∩)O谢谢!

小猪Android开发交流群:小猪Android开发交流群群号:421858269

新Android UI实例大全目录:http://blog.csdn.net/coder_pig/article/details/42145907

1)获取手机屏幕尺寸与屏幕密度:

先要说一点,我们能通过编程获取到的手机屏幕尺寸,只是分辨率哦!!!真正的屏幕尺寸,

多少寸这样要么自己测,要么上网查!编程获取到的尺寸只是分辨率,切记!!!

下面提供一个工具类,提供三种获取手机分辨率与屏幕密度的方法,方法一已经过时,不建议

使用了!

先上下效果图吧:

工具类:

GetScreenParameter.java

package com.jay.example.getscreendemo;

import android.app.Activity;
import android.content.Context;
import android.util.DisplayMetrics;
import android.util.Log;
import android.view.Display;

public class GetScreenParameter {

	//方法一已经过时了,虽然可以使用,但不建议使用
	public static void getResolution1(Context mContext) {
		Display mDisplay = ((Activity) mContext).getWindowManager()
				.getDefaultDisplay();
		int W = mDisplay.getWidth();
		int H = mDisplay.getHeight();
		Log.i("getResolution1", "Width = " + W + "px");
		Log.i("getResolution1", "Height = " + H + "px");
	}

	//方法二是通过getWindowManager来获取屏幕尺寸的
	public static void getResolution2(Context mContext) {
		DisplayMetrics mDisplayMetrics = new DisplayMetrics();
		((Activity) mContext).getWindowManager().getDefaultDisplay()
				.getMetrics(mDisplayMetrics);
		int W = mDisplayMetrics.widthPixels;
		int H = mDisplayMetrics.heightPixels;
		float density = mDisplayMetrics.density; // 屏幕密度(0.75 / 1.0 / 1.5)
		int densityDpi = mDisplayMetrics.densityDpi; // 就是屏幕密度 *160而已,屏幕密度DPI(120 / 160 / 240)
		Log.i("getResolution2", "Width = " + W + "px");
		Log.i("getResolution2", "Height = " + H + "px");
		Log.i("getResolution2", "density = " + density);
		Log.i("getResolution2", "densityDpi = " + densityDpi);
	}

	//方法三是通过getResources来获取屏幕尺寸的
	public static void getResolution3(Context mContext) {
		DisplayMetrics mDisplayMetrics = new DisplayMetrics();
		mDisplayMetrics = mContext.getResources().getDisplayMetrics();
		int W = mDisplayMetrics.widthPixels;
		int H = mDisplayMetrics.heightPixels;
		float density = mDisplayMetrics.density; // 屏幕密度(0.75 / 1.0 / 1.5)
		int densityDpi = mDisplayMetrics.densityDpi; // 就是屏幕密度 *160而已,屏幕密度DPI(120 / 160 / 240)
		Log.i("getResolution3", "Width = " + W + "px");
		Log.i("getResolution3", "Height = " + H + "px");
		Log.i("getResolution3", "density = " + density);
		Log.i("getResolution3", "densityDpi = " + densityDpi);
	}

}

MainActivity.java

package com.jay.example.getscreendemo;

import android.app.Activity;
import android.os.Bundle;

public class MainActivity extends Activity {

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);
		GetScreenParameter.getResolution1(MainActivity.this);
		GetScreenParameter.getResolution2(MainActivity.this);
		GetScreenParameter.getResolution3(MainActivity.this);
	}
}

用法很简单,这里只是打印到logcat里,大家可以按自己的需求进行修改,另外还有一点要注意的是:

对于一些屏幕密度低的小屏手机,比如240*320的手机,计算出来的尺寸可能为:320*427,而网上也有解决方法,

原因好像是:没有设定多分辨率支持的话,Android系统会将240x320的低密度(120)尺寸转换为中等密度

(160)对应的尺寸,于是乎要获得正确的物理尺寸,只需要在AndroidManifest.xml文件中添加下述内容:

<supports-screens
android:smallScreens="true"
android:normalScreens="true"
android:largeScreens="true"
android:resizeable="true"
android:anyDensity="true"/>

就可以解决这个问题了!

2)手机分辨率问题:

相信大家创建完工程后,都可以看到res目录下的drawable有几种

这个时候你就可能有一些疑问了,这些文件夹都是干嘛的为什么要分那么多个?

答:这些文件夹都是放drawable资源的,你可以理解为放图片的,分那么多个是为了

针对不同屏幕密度的手机加载不同的图片资源,之所以这样做,是因为,同一张图片在

不同屏幕密度手机下可能出现不同的结果,这显然和我们的原意相违背;于是乎Android

会根据手机dpi的不同加载对应文件夹下的图片资源!

后面写跟着的xdpi就是会加载对应文件夹下的图片资源!

当然,这也不是绝对的,比如我们把所有的图片都丢在了drawable-hdpi下的话,即使手机

本该加载ldpi文件夹下的图片资源,但是ldpi下没有,那么加载的还会是hdpi下的图片!

另外,还有一种情况:比如是hdpi,mdpi目录下有,ldpi下没有,那么会加载mdpi中的资源!

原则是使用最接近的密度级别!

ps:另外如果你想禁止Android不跟随屏幕密度加载不同文件夹的资源,只需在AndroidManifest.xml

文件中添加android:anyDensity="false"字段即可!

3)屏幕适配的问题:

相信屏幕适配都是大家头疼的一个问题吧,这里的话就说下界面开发时要注意的地方吧!

①画界面的时候使用RelativeLayout + LinearLayout的weight(权重)属性来编写!

②多用match_parent和warp_content,如果必须写死控件的大小的话,用dp而不要用px(像素)

对于文字大小则用sp,如果我们不设置textSize的话,默认大小是14sp!

(如果文字大小大于15sp的话也可以用dp,自己喜欢!)

③针对不同屏幕密度的手机提供不同大小的图片,从低到高的比依次为:3,4,6,8;

例如:ldpi下的图片为36*36,那么mdpi就为48*48,同理hdpi为72*72,xhdpi为96*96

④针对不同的手机使用不同的布局,只需要创建一个布局文件夹,命名为:

layout-480x320这样的格式,然后写相应的布局文件,layout-320x240这样,Android系统会根据

不同的手机分辨率加载不同的布局!另外还要在AndroidManifest.xml里添加这段东西:

<supports-screens
android:smallScreens="true"
android:normalScreens="true"
android:largeScreens="true"
android:xlargeScreens="true"
android:anyDensity="true" />

不然会没有效果的!

⑤对于局部拉伸的图片,比如最常见的聊天时的TextView,文字过长就可能引起拉伸变形,那么

这些时候就应该使用9-patch工具对图片进行处理了!

ps:关于9patch工具的使用,可到:9patch(9妹)的用法

4.横竖屏加载不同布局:

layout-port:横屏   layout-land:竖屏

手机加载的时候会判断横竖屏,接着加载不同的布局

时间: 2025-01-04 13:16:44

New UI-获取手机屏幕尺寸与分辨率,屏幕适配,横竖屏问题的相关文章

iPhone屏幕尺寸、分辨率及适配

目录(?)[+] 1.iPhone尺寸规格 设备 iPhone 宽 Width 高 Height 对角线 Diagonal 逻辑分辨率(point) Scale Factor 设备分辨率(pixel) PPI 3GS 2.4 inches (62.1 mm) 4.5 inches (115.5 mm) 3.5-inch 320x480 @1x 320x480 163 4(s) 2.31 inches (58.6 mm) 4.5 inches (115.2 mm) 3.5-inch 320x480

iosiPhone屏幕尺寸、分辨率及适配

iosiPhone屏幕尺寸.分辨率及适配 1.iPhone尺寸规格 设备 iPhone 宽 Width 高 Height 对角线 Diagonal 逻辑分辨率(point) Scale Factor 设备分辨率(pixel) PPI 3GS 2.4 inches (62.1 mm) 4.5 inches (115.5 mm) 3.5-inch 320x480 @1x 320x480 163 4(s) 2.31 inches (58.6 mm) 4.5 inches (115.2 mm) 3.5-

【转】iPhone屏幕尺寸、分辨率及适配

原文网址:http://blog.csdn.net/phunxm/article/details/42174937 1.iPhone尺寸规格 设备 iPhone 宽 Width 高 Height 对角线 Diagonal 逻辑分辨率(point) Scale Factor 设备分辨率(pixel) PPI 3GS 2.4 inches (62.1 mm) 4.5 inches (115.5 mm) 3.5-inch 320x480 @1x 320x480 163 4(s) 2.31 inches

转: iPhone屏幕尺寸、分辨率及适配

1.iPhone尺寸规格 设备 iPhone 宽 Width 高 Height 对角线 Diagonal 逻辑分辨率(point) Scale Factor 设备分辨率(pixel) PPI 3GS 2.4 inches (62.1 mm) 4.5 inches (115.5 mm) 3.5-inch 320x480 @1x 320x480 163 4(s) 2.31 inches (58.6 mm) 4.5 inches (115.2 mm) 3.5-inch 320x480 @2x 640x

iPhone屏幕尺寸、分辨率及适配 (转)

1.iPhone尺寸规格 设备 iPhone 宽 Width 高 Height 对角线 Diagonal 逻辑分辨率(point) Scale Factor 设备分辨率(pixel) PPI 3GS 2.4 inches (62.1 mm) 4.5 inches (115.5 mm) 3.5-inch 320x480 @1x 320x480 163 4(s) 2.31 inches (58.6 mm) 4.5 inches (115.2 mm) 3.5-inch 320x480 @2x 640x

WP8.1:关于屏幕尺寸和分辨率的那些事儿

目前市面上的Windows Phone设备越来越多,尺寸和分辨率也越来越多,特别是WP8.1时代的到来.做过wp开发的人都知道应用适配其实较安卓要简单太多了,其中有一个重要原因,就是微软号称所有WP设备都将以2个基准分辨率来发展,即800 : 480和853 : 480.WP8+的应用适配相对来说比较简单,主要让屏幕布局适配这两种比例足矣,想必对WVGA.WXGA和720p三种分辨率及对应的模拟器都有一定了解. 撸主最近深陷Universal Apps的大坑,虽说API变化很大,却提供了更多有价

android为每个屏幕尺寸和分辨率做设计(一)

一.分辨率无关 1.使用dp(dpi) Android使用密度无关的像素(dp)来指定屏幕尺寸,它允许在具有不同像素密度而屏幕大小相同的设备上通过缩放达到相同的效果.(还没解决不同屏幕尺寸的问题?) 2.像素密度的资源限定符 当使用不能很好地动态缩放的Drawable资源时,应该创建和包含针对每种像素密度类别进行优化的图像资源. 就是drawable-hdpi.m.l 感觉这个也好麻烦....哎,我都是只用一个hdpi偷懒,不过这样小屏幕也加载了大图片... 二.为不同的屏幕大小提供支持和优化

【ios开发】 判断设备屏幕尺寸、分辨率

IOS 设备现有的分辨率如下:iPhone/iPod Touch普通屏                          320像素 x 480像素       iPhone 1.3G.3GS,iPod Touch 1.2.33:2 Retina 屏           640像素 x 960像素        iPhone 4.4S,iPod Touch 416:9 Retina 屏               640像素 x 1136像素      iPhone 5,iPod Touch 5

智能手机屏幕尺寸和分辨率一览表

智能手机屏幕尺寸和分辨率一览表 http://wenku.baidu.com/link?url=zdx-NpWFY1-LdtOFaO0EIYQD3WAnpDlbuWBo059-ipTntAqDMpy6eu52qmcKfMelmn85k2a1DRplmuPPZzR3MyDFkdL4NOdIPyGWPZHOgkC