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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/460992.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

(一)FlexViewer之整体框架解析

文章版权由作者李晓晖和博客园共有,若转载请于明显处标明出处:http://www.cnblogs.com/naaoveGIS/。 1.FlexViewer简介 FlexViewer框架为Esri提供的可以高效开发基于WEB的地理信息应用系统的一种完全免费的应用程序框架。目前有两种版本,一种…

linux gunzip r .tar,Linux命令之文件归档、压缩、解压缩tar,gzip,gunzip,bzip2,bunz -电脑资料...

tar 建立档案文件【语法】 tar [option] tarfile filename【命令说明】文件名必须紧跟在-f参数后,且作为参数的最后一项;【参数说明】-c 建立一个新的档案文件;-f 指定档案文件名;-r 往归档文件中追加文件;-x 从档案文件中提取文件;-v,-vv 显示进度信息;-t 列出存档文件的信息(…

三阶魔方复原操作方法

在女票的指导下,我花了一个晚上学习如何复原三阶魔方,虽然是知其然不知其所以然,但好歹也能把魔方复原了。下面都是一些傻瓜式的操作,里面涉及的理论我不清楚。魔方总共分三层,下面是每层复原方法。 第一层 1、先以“…

Phaser开源2d引擎 javascript/html5游戏框架

功能特点(Features) 易维护代码(Easy Asset Loading) Phaser可以加载图片,音频文件,数据文件,文本文件和自动解析精灵图和纹理地图集数据(出口纹理封隔器或Flash CS6&#xf…

8大排序算法图文讲解转

本文链接:http://www.cricode.com/3212.html 作者:快课网——Jay13 转载请务必保留作者出处,谢谢! 排序算法可以分为内部排序和外部排序,内部排序是数据记录在内存中进行排序,而外部排序是因排序的数据很大…

与Linux系统相关的面试题

摘自微信公众号:嵌入式ARM 1、TASK有几种状态? 运行、就绪、等待、睡眠、挂起 2、TASK有几种通讯方式? 共享内存、信号量、消息队列、管道、socket 3、sysfs的主要作用? (1)可以把设备和驱动程序的信…

linux pmap was java,jvm 《九》pmap linux 命令介绍 及使用

用法pmap [ -x | -d ] [ -q ] pids...pmap -V选项含义-x extended Show the extended format. 显示扩展格式-d device Show the deviceformat. 显示设备格式-q quiet Do not display some header/footerlines. 不显示头尾行-V show version …

Immutable Collections(3)Immutable List实现原理(中)变化中的不变

Immutable Collections(3)Immutable List实现原理(中)变化中的不变 文/玄魂 前言 在上一篇文章&#xff08;Immutable Collections&#xff08;2&#xff09;ImmutableList<T>实现原理.&#xff08;上&#xff09;&#xff09;,分析了&#xff09;ImmutableList<T>…

大话Fragment管理

大话Fragment管理 上一个项目遇到了一个Activity 管理30个Fragment的情况&#xff0c;刚开始的时候真的管理的焦头烂额&#xff0c;但是后来不停的研究api文档&#xff0c;渐渐的明白了android的Fragment管理 体系。下面用…

c语言例题功能作用,一篇C语言面试题的汇总

2015-03-21 06:30:02阅读( 107 )1&#xff0e; 找错void test1(){char string[10]; //string的长度应该设为11&#xff0c;要给”留出位置char* str1”0123456789″;strcpy( string, str1);}void test1(){char string[10], str1[10];for(I0; I<10&#xff1b; I ) //变量…

第一季4:Hi3518E_SDK_Vx.x.x.x的SDK目录结构

一、Hi3518E_SDK_V1.0.3.0.tgz的位置 “Hi3518E_SDK_V1.0.3.0.tgz”位于“Hi3518E V200R001C01SPC030”中&#xff0c;其目录包含关系如下。 Hi3518E_SDK_V1.0.3.0.tgz 解压后内部文件组织如下。 二、执行SDK展开脚本sdk.unpack后的目录关系 将Hi3518E_SDK_V1.0.3.0.tgz拷贝到…

第一季6:海思方案中uboot、kernel和rootfs的烧写方法

以下内容源于朱有鹏嵌入式课程的学习与整理&#xff0c;如有侵权请告知删除。 一、概述 因为所用的板子默认从SPI Flash启动&#xff0c;因此本文主要讲如何“使用tftp&#xff0c;烧写映像文件&#xff08;uboot、kernel、rootfs&#xff09;到SPI Flash”。另外海思还提供了“…

CSS如何正确显示人民币符号¥

我们做网页时要正确显示人民币符号可以用如下办法&#xff1a;CSS&#xff1a;在中文输入法下用shift4输出的&#xffe5;在微软雅黑&#xff08;Microsoft YaHei&#xff09;&#xff0c;华文细黑&#xff08;STXihei&#xff09;&#xff0c;&#xff08;MingLiu&#xff09;…

java模式之装饰模式

1. 什么叫装饰模式? 根据业务的需求&#xff0c;需要对一个类的方法进行增强的处理。 2. 为什么需要装饰模式&#xff1f; 拓展性更加的好&#xff0c;当觉得这个装饰不好的时候&#xff0c;可以直接拿下&#xff0c;不需要改变任何的代码。 3. 装饰模式的一个具体的应用&…

字体文件解析 c语言,如何正确地从C语言的文件中读取某些字符串?

您试图从文件中读取的内容并不简单,但可以通过设置一个标志来处理,该标志告诉您是否已经看到a或b,跳过所有空白和:字符,将所有其他字符存储在缓冲区中,根据需要重新分配,然后在第二个“A”或“B”找到了,把那个角色放回FILE*流与ungetc,nul终止并返回缓冲区。听起来很简单——对…

如何判断linux系统是32位还是64位的?

最简单的是输入命令&#xff1a;uname -m 查看输出&#xff0c;如果输出是i686这种ixxx系列的&#xff0c;都是32位系统&#xff0c;如果出现x86_64这样的&#xff0c;就是64位。

02 - 替换SetInput方法 VTK 6.0 迁移 (2013-06-30 16:22)

VTK6 引入了许多不兼容的变化&#xff0c;这其中就包括用SetInputData()和SetInputConnection()替换SetInput()方法。在先前的版本中&#xff0c;VTK4 引入了SetInput()方法&#xff0c;VTK5中引入了SetInputConnection()。 下面举一些例子&#xff1a;在如下例子中&#xff0c…

c语言中怎么 写子程序,哪位师傅知道51单片机怎样编写子程序?C语言的。在主程序里调...

该楼层疑似违规已被系统折叠 隐藏此楼查看此楼/*************************************************************************************** 外部中断0实验 *实现现象&#xff1a;下载程序后按下K3按键可以对D1小灯状态取反。注意事项&#xff1a;无。***********************…

Java Web笔记之Struts2.1 +Hibernate3.3 +Spring3.0

2019独角兽企业重金招聘Python工程师标准>>> 1、Struts2 1.1、了解Struts2 Struts2是基于MVC设计模式的Java Web框架技术之一&#xff0c;按照MVC设计思想把Java Web应用程序分为&#xff1a; 控制器层&#xff0c;包括核心控制器FilterDispatcher和业务控制器Actio…

高地址和低地址、高字节与低字节、大小端模式的转换、存储顺序

以下内容源于网络资源的学习与整理&#xff0c;如有侵权请告知删除。 一、高地址和低地址 二、高字节低字节 如int a16777220&#xff0c;化为十六进制是0x01 00 00 04&#xff0c;则04属于低字节&#xff0c;01属于高字节。 三、大小端模式 &#xff08;1&#xff09;如果a在内…