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);
转载于:https://www.cnblogs.com/snake-hand/p/3151370.html
Android 调整屏幕分辩率相关推荐
- html网页大小自动调整大小,根据电脑屏幕分辩率大小自动调整网页宽度
目前,电脑显示器主要为液晶显示器,它们的屏幕大小参差不齐,分辨率自然也大小不一,从面导致同一大小的网页在不同分辨率的电脑显示千差万别,可能有的显示正常,有的显示乱.这就要求在设计网页时处理好这个问题, ...
- 虚拟内存越大越好吗_手机如何选择屏幕分辩率?720p、1080P,数值越大越好吗?...
现在大家在购买手机的时候主要是看哪方面那?系统.处理器.外观还是相机?在很多发布会或者产品介绍中都有着屏幕分辨率,并且很多时候也会大肆宣扬这方面,那么大家知道什么是屏幕分辨率?真的是数值越大越好吗? ...
- Android调整屏幕亮度和改变屏幕亮度调整模式的代码
最近有一个调整屏幕亮度的需求,在网上找了各种代码,心乱如麻.不是长篇大论说源码的,就是只言片语就上代码的,关键是代码还不能直接用. 这里面确实是有一些坑,在这里我会把可以用的代码写出来,并且告诉大家坑 ...
- linux下屏幕太靠右了,怎么消除linux下的屏幕偏移现象和调整屏幕刷新率?
解决一个挺普遍的问题 (出自linuxfans.org) 一些linux用户(常见的是nvidia显卡用户)在配置完X服务器后,已经可以进入xwin桌面,只是屏幕是歪的,怎么办?当然,用户可以利用显示 ...
- linux调整屏幕位置,怎么消除linux下的屏幕偏移现象和调整屏幕刷新率?
解决一个挺普遍的问题 (出自linuxfans.org) 一些linux用户(常见的是nvidia显卡用户)在配置完X服务器后,已经可以进入xwin桌面,只是屏幕是歪的,怎么办?当然,用户可以利用显示 ...
- android调整屏幕亮度
一:只改变当前程序android屏幕亮度 (1)方法: lp.screenBrightness 取值 0.0 -- 1.0 ※设定值(float)的范围,默认小于 0(系统设定).0.0(暗)-1.0 ...
- 树莓派学前班——设置屏幕分辩率
前提 前段时间购买了一个树莓派.除了树莓派之外,还购买了一些附件,例如二手的戴尔液晶显示器,一个HDMI转VGA转换器.由于从来没有使用过linux只能一点一点的开始摸索.首先遇到的问题便是设 ...
- windows 屏幕分辩率多显示器问题
文章目录 问题描述 解决方案 问题描述 明明有两个显示器,显示却有三个,现在的问题是如何减少多余的那个显示器! 这样的情况带给我的困扰是:鼠标移动到右边界消失,所以需要解决它 现在的情况: 要达到的情 ...
- 三星a52屏幕刷新率设置方法分享
三星a52手机支持用户们自己调整屏幕刷新率.能够使你的使用操作更加的快速.流畅.不是吧不是吧你还不知道三星a52屏幕刷新率在哪调?赶快来看看换换带来的详细教程.希望能帮到你! 三星a52屏幕刷新率调整 ...
最新文章
- 开发日记-20190915 关键词 汇编语言王爽版 第十章
- rust(60)-opencv(1)
- C语言求一个数是否为armstrong阿姆斯特朗数(附完整源码)
- python函数和模块的使用方法_Python学习06_函数和模块的使用
- 微信没有回车键怎么换行_在东平相亲网加了心仪对方的微信,但是没有话题怎么办?...
- mfc获取子窗口句柄_前端设计-JavaScript中父窗口与子窗口间的通信
- python打包文件提示错误
- jQuery 文档操作方法 (四)
- 排序算法--冒泡排序
- bcache -c删除后端设备_前、后端分离权限控制设计与实现
- 计算机动漫与游戏制作电脑配置,动漫与游戏设计该如何选电脑配置?
- 何登骥获“两优一先”荣誉 谋定·国稻种芯: 湖南农业科学院表彰
- ManoMotion⭐二、Unity手势识别插件简介,及效果录屏
- 720实训——智慧消防案例分析
- Android各种时间格式转换
- 使用JDK中的安全包对数据进行加解密
- 使用Python进行Excel文件拆分
- 播放3d影片 android,手机上怎么观看3D电影?
- 在C语言中使用Esc退出的程序,C如何使用ESC按钮终止我的程序
- 【CSS】QQ邮箱布局,词典四列布局,行内布局
热门文章
- 动手学无人驾驶(2):车辆检测
- Apollo技能图谱2.0焕新发布 更新7大能力91个知识点
- Apollo进阶课程 ③ | 开源模块讲解(中)
- 怎么用计算机拟合数据,数据拟合的几个应用实例-毕业论文.doc
- mysql json 创建索引_MySQL · 最佳实践 · 如何索引JSON字段
- oracle中那个日期怎么相减_oracle数据库中日期加减函数
- python列表浅复制_Python列表深浅复制详解
- linux内核ddr初始化,X-007-UBOOT-DDR的初始化(Bubblegum-96平台)
- mysql 查看集群状态_MySQL数据库集群正确配置步骤
- 键盘录入一个字符串,判断是否是对称字符串