Android 调整屏幕分辩率
Android 可设置为随着窗口大小调整缩放比例及设定fixed的窗口大小。
对于surface的控制在SurfaceHolder类中进行
而Android 屏幕分辩率中已经有一个类DisplayMetics提供
Andorid.util 包下的DisplayMetrics 类提供了一种关于显示的通用信息,如显示大小,分辨率和字体。
为了获取DisplayMetrics 成员,首先初始化一个对象如下:
DisplayMetrics metrics = new DisplayMetrics();
getWindowManager().getDefaultDisplay().getMetrics(metrics);
String str = metrics.toString();
String str = "屏幕分辨率为:" + metrics.widthPixels
+" * "+metrics.heightPixels;
textview.setText(str); //显示
在CTS中有如下一段代码可以体现出不同的单位显示情况:
public void testAccessTextSize() {
DisplayMetrics metrics = mActivity.getResources().getDisplayMetrics();
mTextView = new TextView(mActivity);
mTextView.setTextSize(TypedValue.COMPLEX_UNIT_PX, 20f);
assertEquals(TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_PX, 20f, metrics),
mTextView.getTextSize(), 0.01f);
mTextView.setTextSize(TypedValue.COMPLEX_UNIT_DIP, 20f);
assertEquals(TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, 20f, metrics),
mTextView.getTextSize(), 0.01f);
mTextView.setTextSize(TypedValue.COMPLEX_UNIT_SP, 20f);
assertEquals(TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_SP, 20f, metrics),
mTextView.getTextSize(), 0.01f);
// setTextSize by default unit "sp"
mTextView.setTextSize(20f);
assertEquals(TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_SP, 20f, metrics),
mTextView.getTextSize(), 0.01f);
mTextView.setTextSize(200f);
assertEquals(TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_SP, 200f, metrics),
mTextView.getTextSize(), 0.01f);
}
这里面有几个单位dip, dp, px, sp概念必须了解一下先:
dip: device independent pixels(设备独立像素). 不同设备有不同的显示效果,
这个和设备硬件有关,一般我们为了支持WVGA、HVGA和QVGA 推荐使用这个,不依赖像素。
px: pixels(像素). 不同设备显示效果相同,一般我们HVGA代表320x480像素,这个用的比较多。
pt: point,是一个标准的长度单位,1pt=1/72英寸,用于印刷业,非常简单易用;
sp: scaled pixels(放大像素). 主要用于字体显示best for textsize,根据 google 的建议,
TextView 的字号最好使用 sp 做单位
程序员通常以像素为单位设计计算机用户界面,但是如果显示分辩率发生变更(更高时),
则以前做的应用界面会相应缩小,所以有必要使用与分辨率无关的度量单位解决此问题。
Android支持下列所有单位:
px(像素):屏幕上的点。
in(英寸):长度单位。
mm(毫米):长度单位。
pt(磅):1/72英寸。
dp(与密度无关的像素):一种基于屏幕密度的抽象单位。在每英寸160点的显示器上,1dp = 1px。
dip:与dp相同,多用于android/ophone示例中。
dp也就是dip。这个和sp基本类似。如果设置表示长度、高度等属性时可以使用dp或sp。但如果
设置字体,需要使用sp。dp是与密度无关,sp除了与密度无关外,还与scale无关。
所以为了使用户界面能够在现在和将来的显示器类型上正常显示,建议大家始终使用sp作为
文字大小的单位,将dip作为其他元素的单位。当然,也可以考虑使用矢量图形,而不是用位图
附带两个问题的解决:
解码图片显示时,设定的density会影响到显示效果
在DisplayMetrics.java中定义的默认值:
/**
* Standard quantized DPI for low-density screens.
*/
public static final int DENSITY_LOW = 120;
/**
* Standard quantized DPI for medium-density screens.
*/
public static final int DENSITY_MEDIUM = 160;
/**
* Standard quantized DPI for high-density screens.
*/
public static final int DENSITY_HIGH = 240;
/**
* Standard quantized DPI for extra-high-density screens.
*/
public static final int DENSITY_XHIGH = 320;
/**
* The reference density used throughout the system.
*/
public static final int DENSITY_DEFAULT = DENSITY_MEDIUM;
1、如果图片解码像素高但显示效果不怎么样时,请修改下DENSITY_DEFAULT看个效果
public static final int DENSITY_DEFAULT = DENSITY_XHIGH;
显示例子:
Options opts = new Options();
opts.inScaled = false;
opts.inSampleSize = 1;
opts.inScreenDensity = DisplayMetrics.DENSITY_HIGH;
opts.inPreferredConfig = Bitmap.Config.ARGB_8888;
mBitmapbg = BitmapFactory.decodeResource(this.getResources(), R.drawable.bj, opts);
BitmapDrawable bd = new BitmapDrawable(mBitmapbg);
2、如果图片在不同的显示频率下被放大了,那么有可能与webview相关,这也是density影响的
/**
* Enum for specifying the WebView's desired density.
* FAR makes 100% looking like in 240dpi
* MEDIUM makes 100% looking like in 160dpi
* CLOSE makes 100% looking like in 120dpi
*/
public enum ZoomDensity {
FAR(150), // 240dpi
MEDIUM(100), // 160dpi
CLOSE(75); // 120dpi
ZoomDensity(int size) {
value = size;
}
int value;
}
那么是否可能根据屏幕的分辩率进行动态设定呢?
int dDensity = getResources().getDisplayMetrics().densityDpi ;
WebSettings.ZoomDensity zDensity = WebSettings.ZoomDensity.MEDIUM ;
switch(dDensity) {
case DisplayMetrics.DENSITY_LOW :
zDensity = WebSettings.ZoomDensity.CLOSE;
break;
case DisplayMetrics.DENSITY_MEDIUM:
zDensity = WebSettings.ZoomDensity.MEDIUM;
break;
case DisplayMetrics.DENSITY_HIGH:
zDensity = WebSettings.ZoomDensity.FAR;
break ;
}
webSettings.setDefaultZoom(zDensity);
Android 调整屏幕分辩率的更多相关文章
- Delphi 实现窗体自适应调整尺寸以适应不同屏幕分辩率的显示问题
给你一段代码,网上转的:unit uMyClassHelpers;//实现窗体自适应调整尺寸以适应不同屏幕分辩率的显示问题.// 陈小斌,2012年3月5日 interface Uses ...
- Android 播放电影时滑动屏幕调整屏幕亮度(转)
(转自:http://blog.csdn.net/piaozhiye/article/details/6544450) 发现有一些主流的播放器播放电影时可以通过滑动屏幕调整屏幕亮度,其实实现起来也很容 ...
- 红帽企业版RHEL7.1在研域工控板上,开机没有登陆窗口 -- 编写xorg.conf 简单三行解决Ubuntu分辩率不可调的问题
红帽企业版RHEL7.1在研域工控板上,开机没有登陆窗口 没有登陆窗口 的原因分析: 没有登陆窗口的原因是因为有多个屏幕在工作,其中一个就是build-in 屏幕(内置的虚拟屏幕)和外接的显示器,并且 ...
- 再次了解android中屏幕尺寸,单位等
android设备多种多样,要让你的app能够适配所有的屏幕是一件很痛苦的事情,在做适配之前我们首先需要了解android中dimension的定义 android中dimension是如何定义的? ...
- 【分享】迅为iTOP4412开发板-Android系统屏幕旋转设置
1.1概述 Android4.0,Androd4.4源代码能够编译成手机模式和平板模式,讯为iTop4412 开发平台 的Android系统默认编译为平板模式.客户须要依据自己的产品设计及应用环境,切 ...
- Android各种屏幕适配原理
dip(dp): device independent pixels(设备独立像素) dip,就是把屏幕的高分成480分,宽分成320分.比如你做一条160dip的横线,无论你在320还480的模拟器 ...
- Android获取屏幕宽和高
android获取屏幕的高度和宽度用到WindowManager这个类,两种方法: 1.WindowManager wm = (WindowManager) getContext() ...
- android自适应屏幕方向和大小
一:不同的layout Android手机 屏幕 大小不一,有480x320, 640x360, 800x480.怎样才能让App自动 适应不同的屏幕 呢? 其实很简单,只需要在res目录下 ...
- android 多屏幕适配 : 第一部分
1.在xml布局文件中,控件的宽度和高度用 dp ; 字体大小用 sp 2.根据屏幕的宽高来动态的适配 , 获取屏幕的宽高的两种方法: 第一种方法: /** * 屏幕的宽度 * 屏幕的高度 * ...
随机推荐
- delphi数字签名验证及能够获取数字签名文件信息(利用wintrust.dll的导出函数,翻译一下)
unit TrustCheck; interface uses Windows,SysUtils,jwaWinTrust,JwaWinCrypt; function CheckFileTrust(co ...
- literal控件的例子
Literal的Mode属性,举例说明 这个属性的枚举值:PassThrough Encode Transform <%@ Page Language="C#" Auto ...
- Uva 12569 Planning mobile robot on Tree (EASY Version)
基本思路就是Bfs: 本题的一个关键就是如何判段状态重复. 1.如果将状态用一个int型数组表示,即假设为int state[17],state[0]代表机器人的位置,从1到M从小到大表示障碍物的位置 ...
- 横瓜先生如何用MDB和XLS等低性能数据库来处理千亿级数据量。
横瓜先生如何用MDB和XLS等低性能数据库来处理千亿级数据量. 横瓜先生曾经用ACCESS做数据库,开发出高性能CMS来处理过TB级的文本数据量,任何请求都可以在10MS内完成,基本就是硬盘延迟的时间 ...
- 【Eclipse Plugin】SonarQube 启动报错
由于近期,信息安全部在搞代码优化工作.所以,配合上边的工作需求,使用sonar对代码进行优化检测.在Eclipse上装Sonar很简单,只要在Eclipse Marketplace上面搜索“Sonar ...
- Xcode插件(一)-规范注释生成器VVDocumenter
原文来自:http://blog.csdn.net/hitwhylz/article/details/27813315 分享几个常用的Xcode插件. 第一个, 规范注释生成器VVDocumenter ...
- python子进程模块subprocess调用shell命令
http://www.cnblogs.com/vamei/archive/2012/09/23/2698014.html
- 根据Email地址跳转到相应的邮箱登录页面 (转)
//跳转到指定的邮箱登录页面 $(".btn_actemail").click(function () { var uurl = $(".hide_email" ...
- Struts2、spring2、hibernate3在SSH中各起什么作用
简单的说: struts 控制用的 hibernate 操作数据库的 spring用解耦的 详细的说: STRUTS 在 SSH 框架中起控制的作用 , 其核心是 Controller, 即 Acti ...
- WebLech是一个功能强大的Web站点下载与镜像工具
WebLech是一个功能强大的Web站点下载与镜像工具.它支持按功能需求来下载web站点并能够尽可能模仿标准Web浏览器的行为.WebLech有一个功能控制台并采用多线程操作. http://sour ...