android屏幕适配的全攻略3-动态获取手机屏幕宽高及动态设置控件宽高
1.获取手机屏幕宽高:
DisplayMetrics dm = new DisplayMetrics(); getWindowManager().getDefaultDisplay().getMetrics(dm); int screenWidth = dm.widthPixels; int screenHeight = dm.heightPixels;
22.根据屏幕宽度为控件设置动态设置宽高:
imageView.setImageResource(R.drawable.newscar);
LayoutParams params = imageView.getLayoutParams();
params.height=screenWidth/10;
params.width =screenHeight/10;
imageView.setLayoutParams(params);
注意示例:
我们需要获取Android手机或Pad的屏幕的物理尺寸,以便于界面的设计或是其他功能的实现。下面就介绍讲一讲如何获取屏幕的物理尺寸
下面的代码即可获取屏幕的尺寸。
在一个Activity的onCreate方法中,写入如下代码:
DisplayMetrics metric = new DisplayMetrics();
getWindowManager().getDefaultDisplay().getMetrics(metric);
int width = metric.widthPixels; // 屏幕宽度(像素)
int height = metric.heightPixels; // 屏幕高度(像素)
float density = metric.density; // 屏幕密度(0.75 / 1.0 / 1.5)
int densityDpi = metric.densityDpi; // 屏幕密度DPI(120 / 160 / 240)
但是,需要注意的是,在一个低密度的小屏手机上,仅靠上面的代码是不能获取正确的尺寸的。比如说,一部240x320像素的低密度手机,如果运行上述代码,获取到的屏幕尺寸是320x427。因此,研究之后发现,若没有设定多分辨率支持的话,Android系统会将240x320的低密度(120)尺寸转换为中等密度(160)对应的尺寸,这样的话就大大影响了程序的编码。所以,需要在工程的AndroidManifest.xml文件中,加入supports-screens节点,具体的内容如下:
<supports-screens
android:smallScreens="true"
android:normalScreens="true"
android:largeScreens="true"
android:resizeable="true"
android:anyDensity="true" />
这样的话,当前的Android程序就支持了多种分辨率,那么就可以得到正确的物理尺寸了。如果没有这几行代码,不管你怎么调整layout中的控件,对应分辨率的手机是没有任何效果的。注意:由于android版本的不同,有些版本不支持xlargeScreens,可以直接将android:xlargeScreens="true"去掉。
杏总的代码也是按照这种方式来适配屏幕的
private void layoutAdjust() {
ECMLog.i_ui(CLASS_TAG, "layoutAdjust called...");
RelativeLayout.LayoutParams params = (RelativeLayout.LayoutParams) logoIV.getLayoutParams();
params.width = 375 * mGlobalData.mScreenWidth / 1080;
params.height = 394 * mGlobalData.mScreenWidth / 1080;
params.topMargin = 470 * mGlobalData.mScreenHeight / 1920;
logoIV.setLayoutParams(params); zhuanyedemimakaguanjiaIV = (ImageView) findViewById(R.id.zhuanyedemimakaguanjiaIV);
params = (RelativeLayout.LayoutParams) zhuanyedemimakaguanjiaIV.getLayoutParams();
params.height = 60 * mGlobalData.mScreenHeight / 1920;
params.width = 470 * mGlobalData.mScreenWidth / 1080;
zhuanyedemimakaguanjiaIV.setLayoutParams(params); }
给了一个线性布局在1920*1080上的宽度和高度是375*394,现在的在不同的手机分辨率上就可以按照上面的比例来上来动态的设计指定线性布局的大小,满足在不同的手机屏幕分辨率上显示的布局的宽度和高度在不同的手机屏幕上显示的效果是一样的。
动态设置控件的宽度和高度的思路来自于:
android屏幕适配的全攻略2--支持手机各种屏幕密度dpi
我们最好按照上面的思路来解决,上面在代码中这样设置这样写主要用于布局控件很少的情况,当布局控件很多的时候,我们在代码中就会写很多代码,这样不太好,按照
android屏幕适配的全攻略2--支持手机各种屏幕密度dpi中的方法,我们ui设计师给了一个一个控件在1920*1080上面的宽度和高度是375*394
我们首先打开工程下的:
找到工程下的values-1920x1080文件夹
打开文件夹下面的lay_x.xml和lay_y.xml的值
375px对应在lay_x中的值是:
394对应在lay_y的值是:
我们在程序中写代码只需要在xml中进行设置就可以了,代码如下:
<TextView
android:text="Hello World!"
android:background="#809"
android:layout_width="@dimen/x110"
android:layout_height="@dimen/y99"/>
这样我们就能够满足在不同的手机中控件显示的宽度和高度在屏幕中显示的大小是一样的,是不是相当的经典。
上面的是对控件能够适配,对应图片的适配按照下面的方法
- 为了让我们提供的图片符合各种屏幕密度的要求。我们需要为不同屏幕密度提供大小不同的图片。
上篇文章中我们提到了在Google官方开发文档中,说明了 mdpi:hdpi:xhdpi:xxhdpi:xxxhdpi=2:3:4:6:8 的尺寸比例进行缩放。例如,一个图标的大小为48×48dp,表示在mdpi上,实际大小为48×48px,在hdpi像素密度上,实际尺寸为mdpi上的1.5倍,即72×72px,以此类推。
因此,我们要在drawable
、drawable-hdpi
、drawable-mdpi
、drawable-xdpi
、drawable-xhdpi
等文件夹下放置相同名称、符合上述比例的图片资源。系统会根据屏幕密度的不同,而选择对应的图片进行加载。
在布局文件中的简单使用:
<Button
android:layout_height="wrap_content"
android:layout_width="wrap_content"
android:background="@drawable/ic_launcher" />
android屏幕适配的全攻略3-动态获取手机屏幕宽高及动态设置控件宽高的更多相关文章
- android屏幕适配的全攻略2--支持手机各种屏幕密度dpi
如何为不同密度的屏幕提供不同的资源和使用密度独立的单位. 1 使用密度无关像素 坚决杜绝在布局文件中使用绝对像素来定位和设置大小.因为不同的屏幕有不同的像素密度,所以使用像素来设置控件大小是有问题的, ...
- android屏幕适配的全攻略--支持不同的屏幕尺寸适配平板和手机
一. 核心概念与单位详解 1. 什么是屏幕尺寸.屏幕分辨率.屏幕像素密度? 屏幕分辨率越大,手机越清晰 dpi就是dot per inch dot意思是点,就是每英寸上面的像素点数 android原始 ...
- 打造一个高逼格的android开源项目——小白全攻略 (转)
转自:打造一个高逼格的android开源项目 小引子 在平时的开发过程中,我们经常会查阅很多的资料,最常参考的是 github 的开源项目.通常在项目的主页面能看到项目的简介和基本使用,并且时不时能看 ...
- android 动态设置控件宽高度
Android 代码里直接使用 setWidth() 和 setHeight()设置宽高度是没用的. 解决办法是 改用setLayoutParams()方法 如设置宽高内容自适应: setLayout ...
- webBrowser中操作网页元素全攻略
原文 webBrowser中操作网页元素全攻略 1.获取非input控件的值: webBrowser1.Document.All["控件ID"].InnerText; 或webBr ...
- Android屏幕适配全攻略 (转载)
http://blog.csdn.net/jdsjlzx/article/details/45891551 https://github.com/hongyangAndroid/AndroidAuto ...
- Android屏幕适配全攻略(最权威的官方适配指导)屏幕尺寸 屏幕分辨率 屏幕像素密度 dpdipdpisppx mdpihdpixdpixxdpi
Android屏幕适配全攻略(最权威的官方适配指导)原创赵凯强 发布于2015-05-19 11:34:17 阅读数 153734 收藏展开 转载请注明出处:http://blog.csdn.net/ ...
- 【收藏】Android屏幕适配全攻略(最权威的Google官方适配指导)
来源:http://blog.csdn.net/zhaokaiqiang1992 更多:Android AutoLayout全新的适配方式, 堪称适配终结者 Android的屏幕适配一直以来都在折磨着 ...
- Android屏幕适配全攻略(最权威的官方适配指导)(转),共大家分享。
Android的屏幕适配一直以来都在折磨着我们这些开发者,本篇文章以Google的官方文档为基础,全面而深入的讲解了Android屏幕适配的原因.重要概念.解决方案及最佳实践,我相信如果你能认真的学习 ...
随机推荐
- [JavaWeb基础] 009.Struts2 上传文件
在web开发中,我们经常遇到要把文件上传下载的功能,这篇文章旨在指导大家完成文件上传功能 1.首先我们需要一个上传文件的页面. <!--在进行文件上传时,表单提交方式一定要是post的方式, 因 ...
- 获取元素节点 & 操作属性节点
1.html 文档编写 js 代码的位置: window.onload事件在整个html文档被完全加载完再执行, 所以可以获取html文档的任何节点 js-window-onload.html ...
- JAVA中的注释方法
Java的三种注释方法 ①单行注释:使用 // ,其注释内容从//开始到本行结束,比较常用, 快捷键为:Ctrl + / 或者 Ctrl + Shift + C 取消注释:Ctrl + / 或者 ...
- PMP | 备考笔记
(持续更新......) 五大过程组和十大知识领域是PMP的重要组成部分,也是这门课的重点线索,本文会逐步迭代.渐进明细的来补充完善这个体系. (先放个图吧) 以下每个模块记录自己有点模糊的地方 项目 ...
- 50个SQL语句(MySQL版) 问题二
--------------------------表结构-------------------------- student(StuId,StuName,StuAge,StuSex) 学生表 tea ...
- 通过jquery实现tab切换
//css代码 *{ margin: 0; padding: 0; } #box{ margin: 0 auto; width: 800px; border: 5px solid #000000; o ...
- Rocket - tilelink - SRAM
https://mp.weixin.qq.com/s/-z9n6SHyAiK2OE7mOSvC2Q 简单介绍SRAM的实现. 1. 基本介绍 实现一个支持读写的静态存储器.存取的 ...
- Java实现 蓝桥杯 算法提高 快乐司机
算法提高 快乐司机 时间限制:1.0s 内存限制:256.0MB 问题描述 "嘟嘟嘟嘟嘟嘟 喇叭响 我是汽车小司机 我是小司机 我为祖国运输忙 运输忙" 这是儿歌"快乐的 ...
- Java实现 LeetCode 17 电话号码的字母组合
17. 电话号码的字母组合 给定一个仅包含数字 2-9 的字符串,返回所有它能表示的字母组合. 给出数字到字母的映射如下(与电话按键相同).注意 1 不对应任何字母. 示例: 输入:"23& ...
- java实现串逐位和(C++)
给定一个由数字组成的字符串,我们希望得到它的各个数位的和. 比如:"368" 的诸位和是:17 这本来很容易,但为了充分发挥计算机多核的优势,小明设计了如下的方案: int f(c ...