搜索
查看
编辑修改
首页
UNITY
NODEJS
PYTHON
AI
GIT
PHP
GO
CEF3
JAVA
HTML
CSS
搜索
知新_RL
这个屌丝很懒,什么也没留下!
关注作者
热门标签
jquery
HTML
CSS
PHP
ASP
PYTHON
GO
AI
C
C++
C#
PHOTOSHOP
UNITY
iOS
android
vue
xml
爬虫
SEO
LINUX
WINDOWS
JAVA
MFC
CEF3
CAD
NODEJS
GIT
Pyppeteer
article
热门文章
1
零代码开发,Sora生成视频!和 AI 分钱的时代来了!
2
Nginx访问FastDfs的文件_kkfileview fastdfs
3
ChatGLM 大模型应用构建 & Prompt 工程_chatglm prompt
4
A Decade’s Battle on Dataset Bias: Are We There Yet_a decade鈥檚 battle on dataset bias: are we there ye
5
kafka入门篇-使用_kafka.scala
6
IEEE Transactions on Industrial Informatics(TII)投稿指导
7
Maven是什么? Maven的概念+作用
8
文本标注平台 doccano 安装教程_doccano安装
9
Go语言中测试和性能
10
【蓝桥杯】省模拟赛
当前位置:
article
> 正文
Android自适应屏幕大小和layout布局(横屏|竖屏)_安卓横屏图片会自动缩小放大吗?
作者:知新_RL | 2024-03-29 00:01:27
赞
踩
安卓横屏图片会自动缩小放大吗?
1、屏幕相关概念
1.1分辨率
是指屏幕上有横竖各有多少个像素
1.2屏幕尺寸
指的是手机实际的物理尺寸,比如常用的2.8英寸,3.2英寸,3.5英寸,3.7英寸
android将屏幕大小分为四个级别(small,normal,large,and extra large)。
1.3屏幕密度
每英寸像素数
手机可以有相同的分辨率,但屏幕尺寸可以不相同,
Diagonal pixel表示对角线的像素值(=),DPI=933/3.7=252
android将实际的屏幕密度分为四个通用尺寸(low,medium,high,and extra high)
一般情况下的普通屏幕:ldpi是120dpi,mdpi是160dpi,hdpi是240dpi,xhdpi是320dpi
对于屏幕来说,dpi越大,屏幕的精细度越高,屏幕看起来就越清楚
1.4密度无关的像素(Density-independent pixel——dip)
dip是一种虚拟的像素单位
dip和具体像素值的对应公式是dip/pixel=dpi值/160,也就是px = dp * (dpi / 160)
当你定义应用的布局的UI时应该使用dp单位,确保UI在不同的屏幕上正确显示。
手机屏幕分类和像素密度的对应关系如表1所示
手机尺寸分布情况(http://developer.android.com/resources/dashboard/screens.html)如图所示,
目前主要是以分辨率为800*480和854*480的手机用户居多
从以上的屏幕尺寸分布情况上看,其实手机只要考虑3-4.5寸之间密度为1和1.5的手机
2、android多屏幕支持机制
Android的支持多屏幕机制即用为当前设备屏幕提供一种合适的方式来共同管理并解析应用资源。
Android平台中支持一系列你所提供的指定大小(size-specific),指定密度(density-specific)的合适资源。
指定大小(size-specific)的合适资源是指small, normal, large, and xlarge。
指定密度(density-specific)的合适资源,是指ldpi (low), mdpi (medium), hdpi (high), and xhdpi (extra high).
Android有个自动匹配机制去选择对应的布局和图片资源
1)界面布局方面
根据物理尺寸的大小准备5套布局:
layout(放一些通用布局xml文件,比如界面顶部和底部的布局,不会随着屏幕大小变化,类似windos窗口的title bar),
layout-small(屏幕尺寸小于3英寸左右的布局),
layout-normal(屏幕尺寸小于4.5英寸左右),
layout-large(4英寸-7英寸之间),
layout-xlarge(7-10英寸之间)
2)图片资源方面
需要根据dpi值准备5套图片资源:
drawable:主要放置xml配置文件或者对分辨率要求较低的图片
drawalbe-ldpi:低分辨率的图片,如QVGA (240x320)
drawable-mdpi:中等分辨率的图片,如HVGA (320x480)
drawable-hdpi:高分辨率的图片,如WVGA (480x800),FWVGA (480x854)
drawable-xhdpi:至少960dp x 720dp
Android有个自动匹配机制去选择对应的布局和图片资源。
系统会根据机器的分辨率来分别到这几个文件夹里面去找对应的图片。
在开发程序时为了兼容不同平台不同屏幕,建议各自文件夹根据需求均存放不同版本图片。
3、AndroidManifest.xml 配置
android从1.6和更高,Google为了方便开发者对于各种分辨率机型的移植而增加了自动适配的功能
<supports-screens
android:largeScreens="true"
android:normalScreens="true"
android:smallScreens="true"
android:anyDensity="true"/>
3.1是否支持多种不同密度的屏幕
android:anyDensity=["true" | "false"]
如果android:anyDensity="true"
指应用程序支持不同密度,会根据屏幕的分辨率自动去匹配。
如果android:anyDensity="false"
应用程序支持不同密度,系统自动缩放图片尺寸和这个图片的坐标。具体解释一下系统是如何自动缩放资源的。
例如我们在hdpi,mdpi,ldpi文件夹下拥有同一种资源,那么应用也不会自动地去相应文件夹下寻找资源,这种情况都是出现在高密度,以及低密度的手机上,比如说一部240×320像素的手机,
如果设置android:anyDensity="false",Android系统会将240 x 320(低密度)转换为 320×480(中密度),这样的话,应用就会在小密度手机上加载mdpi文件中的资源。
3.2是否支持大屏幕
android:largeScreens=["true" | "false"]
如果在声明不支持的大屏幕,而这个屏幕尺寸是larger的话,系统使用尺寸为("normal")和密度为("medium)显示,
不过会出现一层黑色的背景。
3.3是否支持小屏幕
android:smallScreens=["true" | "false"]
如果在声明不支持的小屏幕,而当前屏幕尺寸是smaller的话,系统也使用尺寸为("normal")和密度为("medium)显示
如果应用程序能在小屏幕上正确缩放(最低是small尺寸或最小宽度320dp),那就不需要用到本属性。否则,就应该为最小屏幕宽度标识符设置本属性
来匹配应用程序所需的最小尺寸。
4、Android提供3种方式处理屏幕自适应
4.1预缩放的资源(基于尺寸和密度去寻找图片)
1)如果找到相应的尺寸和密度,则利用这些图片进行无缩放显示。
2)如果没法找到相应的尺寸,而找到密度,则认为该图片尺寸为 "medium",利用缩放显示这个图片。
3)如果都无法匹配,则使用默认图片进行缩放显示。默认图片默认标配 "medium" (160)。
4.2自动缩放的像素尺寸和坐标(密度兼容)
1)如果应用程序不支持不同密度android:anyDensity="false",系统自动缩放图片尺寸和这个图片的坐标。
2)对于预缩放的资源,当android:anyDensity="false",也不生效。
3)android:anyDensity="false",只对密度兼容起作用,尺寸兼容没效果
4.3兼容更大的屏幕和尺寸(尺寸兼容)
1)对于你在声明不支持的大屏幕,而这个屏幕尺寸是normal的话,系统使用尺寸为 ("normal")和密度为("medium)显示。
2.)对于你在声明不支持的大屏幕,而这个屏幕尺寸是larger的话,系统同样使用尺寸为("normal")和密度为("medium)显示,
不过会出现一层黑色的背景。
5、Android系统自动适配技巧
Android系统采用下面两种方法来实现应用的自动适配:
1)布局文件中定义长度的时候,最好使用wrap_content,fill_parent, 或者dp 进行描述,这样可以保证在屏幕上面展示的时候有合适的大小
2)为不同屏幕密度的手机,提供不同的位图资源,可以使得界面清晰无缩放。
对应bitmap 资源来说,自动的缩放有时会造成放大缩小后的图像变得模糊不清,这是就需要应用为不同屏幕密度配置提供不同的资源:为高密度的屏幕提供高清晰度的图像等。
3)不要使用AbsoluteLayout
4)像素单位都使用DIP,文本单位使用SP
6、在代码中获取屏幕像素、屏幕密度
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)
7、 一般多分辨率处理方法及其缺点
7.1 图片缩放
基于当前屏幕的精度,平台自动加载任何未经缩放的限定尺寸和精度的图片。如果图片不匹配,平台会加载默认资源并且在放大或者缩小之后可以满足当前界面的显示要求。例如,当前为高精度屏幕,平台会加载高精度资源(如HelloAndroid中drawable-hdpi 中的位图资源),如果没有,平台会将中精度资源缩放至高精度,导致图片显示不清晰。
7.2 自动定义像素尺寸和位置
如果程序不支持多种精度屏幕,平台会自动定义像素绝对位置和尺寸值等,这样就能保证元素能和精度160 的屏幕上一样能显示出同样尺寸的效果。例如,要让WVGA 高精度屏幕和传统的HVGA 屏幕一样显示同样尺寸的图片,当程序不支持时,系统会对程序慌称屏幕分辨率为320×480,在(10,10)到(100,100)的区域内绘制图形完成之后,系统会将图形放大到(15,15)到(150,150)的屏幕显示区域。
7.3 兼容更大尺寸的屏幕
当前屏幕超过程序所支持屏幕的上限时,定义supportsscreens元素,这样超出显示的基准线时,平台在此显示黑色的背景图。例如,WVGA 中精度屏幕上,如程序不支持这样的大屏幕,系统会谎称是一个320×480 的,多余的显示区域会被填充成黑色。
7.4 采用OpenGL 动态绘制图片
Android 底层提供了OpenGL 的接口和方法,可以动态绘制图片,但是这种方式对不熟悉计算机图形学的开发者来讲是一个很大的挑战。一般开发游戏,采用OpenGL 方式。
7.5 多个apk 文件
Symbian 和传统的J2ME 就是采用这种方式,为一款应用提供多个分辨率版本,用户根据自己的需求下载安装相应的可执行文件。针对每一种屏幕单独开发应用程序不失为一种好方法,但是目前Google Market 对一个应用程序多个分辨率版本的支持还不完善,开发者还是需要尽可能使用一个apk 文件适应多个分辨率。
本文欢迎转载,但请注明作者与出处:
作者:流星
出处:http://blog.sina.com.cn/staratsky
声明:
本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:
https://www.wpsshop.cn/w/知新_RL/article/detail/332379
推荐阅读
article
Android
用
versionName
判断
版本
大小(是否
进行
版本
更新
)...
一般情况下都是用versionCode
进行
版本
大小的
判断
从而
进行
判断
是否
进行
app的
更新
,但是有可能从网站上爬下来的ve...
赞
踩
article
Android
使用
AIUI
快速搭建
智能
助手_
aiui
语音
案例
android
...
前言目前大部分的手机都有
语音
助手,例如小米手机的小爱同学,VIVO的小V等等,通过
智能
助手我们可以快速询一些资讯或者操作...
赞
踩
article
Audio-
AIUI
语音
交互
_
aiui
语音案例
android
...
通过不同平台设置录音API tinyalsa获取到原始音频,经过回声消除、噪声抑制的简单算法处理得到的单声道音频数据,之...
赞
踩
article
Android
基于讯飞
AIUI
的聊天
Demo
_
aiui
语音案例
android
...
基于讯飞
AIUI
实现一个AI聊天
Demo
,首先在
AIUI
开放平台创建应用,做下简单配置,勾选想要的语义技能,记得保存修改...
赞
踩
article
Android
-
AIUI
技能
设计技巧及
处理
策略总结_
aiui
后
处理
...
半年多一直在做机器人语音方向的应用,现在产品基本上稳定下来了,在语音交互的路上踩过不少坑,在这里记录分享一下。这里假设看...
赞
踩
article
android
ai
用法,使用
AIUIAgent
...
## 使用
AIUIAgent
AIUIAgent
仅对已开通AIUI功能的APPID可下载使用,未开通的应用,可通过Spee...
赞
踩
article
Unity2021
接入讯飞
语音
听写
(
Android
)_
unity
语音
听写
(流式版)...
Unity 讯飞
语音
听写
Android
_
unity
语音
听写
(流式版)
unity
语音
听写
(流式版) ...
赞
踩
article
Android
UI-
ListView
底部
其他控件显示的小例子_list
view
下拉到
底部
显示 其他...
布局文件中放入
ListView
之后,在
底部
加其他控件正常情况会不显示,试出来个小例子,记录一下。list
view
下拉到底...
赞
踩
article
android
黑
科技
项目
,黑
科技
:
使用AI和机器学习将
Android
项目
秒变IOS
项目
...
最近看Github,发现了一个刚出炉的黑
科技
:
利用人工智能(AI)和机器学习(ML)技术将现有
Android
源代码转换成...
赞
踩
article
android
ai
工具使用,
android
ai
学习
...
AI开发平台ModelArtsModelArts是面向开发者的一站式AI开发平台,为机器
学习
与深度
学习
提供海量数据预处理...
赞
踩
article
android
scrollview
自动
滚动
到
底部
,【
Android
】
ScrollView
滚动
到
底部
...
前言:当我们在使用
ScrollView
的时候,当前页面超出Scrollview显示页面需要自动
滚动
到
底部
时,发现不能完全...
赞
踩
article
android
ScrollView
和
listview
嵌套进入界面总
显示
最下面_
android
s...
使用listView和scroll时,界面开始
显示
总是在listView最顶部,而不是
ScrollView
最顶部,应该是...
赞
踩
article
Android
--
(15)
--
解决
ScrollView
中
嵌套
Listview
,
Listview
中
嵌套
...
有这样一个需求: 1.显示一个界面,界面上有一个列表(
ListView
),列表上面有一个可以滚动的海报。 2.要求...
赞
踩
article
android
scrollview
自动
滚动
到
顶部
或者底部...
2019独角兽企业重金招聘Python工程师标准>>> ..._
android
scrollvi...
赞
踩
article
Android
Studio
类
ChatGpt
的免费AI
编程
助手_
android
studio
ai编...
ChatGpt
大火,带动了AI工具的发展,介绍两款免费的AI
编程
助手,一款用于输入关键字自动输出代码,一款则是自动补全提...
赞
踩
article
【AI with ML】第 13 章 :在
Android
应用程序
中使用
TensorFlow
L...
对于如此简单的功能来说,这实在是太过分了,但是像这样的
应用程序
的脚手架几乎与复杂得多的
应用程序
的脚手架相同。最重要的是,...
赞
踩
article
android
scrollview
自动
滚动
到
顶部
或者底部
_
android
投放的屏幕会
自动
滑动
到
顶...
问题:在ScrollView控件中使用GridView,ListView加载数据,首次进入会
自动
显示在GridView控...
赞
踩
article
Android
——UI篇:Scroll
View
子
View
高度
变化时自动滚动到底部的问题_androi...
好久没更新文章了,最近公司项目遇到了一个问题,在我自定义一个组合控件的时候,点几展开后,列表下方的控件显示出来,然后...
赞
踩
article
AI
on
Android
:
安卓
平台上的
人工智能
应用实战(02.
模型
的再训练)_
安卓
ai
模型
学习...
AI
on
Android
:
安卓
平台上的
人工智能
应用实战(02.
模型
的再训练)
AI
on
Android
:
安卓
平台上的人...
赞
踩
article
Studio
Bot
- 让 AI 帮我写
Android
代码
_
android
studio
bo...
Google 旗下的各类产品都成了其展示 AI 实力的舞台。连面向开发者的产品
Android
Studio
也新增了S...
赞
踩
相关标签
版本更新
versionName
字符串比较
人工智能
android
交互
语音识别
webview
java
AIUI
Android
技能
策略
android ai用法
unity
android 黑科技项目
android ai 工具使用
android scrollview自动滚动到底部
listview
scrollview
嵌套listview
移动开发
python