关于Android开发适配问题报告

本文探讨了Android系统适配不同手机的问题,强调了使用`wrap_content`和`match_parent`来解决屏幕尺寸和像素密度适配的重要性。介绍了如何通过配置限定符如sw600dp和large为不同屏幕尺寸提供布局,并建议使用权重属性weight来设计灵活的布局。
摘要由CSDN通过智能技术生成

《关于Android系统适配不同手机问题报告》

一、为什么要做Android手机的适配?

  由于Android系统的开放性,任何用户、开发者、OEM厂商、运营商都可以对Android进行定制,修改成他们想要的样子。

 


 

通过这张图我们就可以了解到随着支持Android系统的设备(手机、平板、电视、手表)的增多,设备碎片化、品牌碎片化、系统碎片化、传感器碎片化和屏幕碎片化的程度也在不断地加深。而我们今天要探讨的,则是对我们开发影响比较大的——屏幕的碎片化。

下面这张图是Android屏幕尺寸的示意图,在这张图里面,蓝色矩形的大小代表不同尺寸,颜色深浅则代表所占百分比的大小。


详细的分析可以去http://opensignal.com/reports/2014/android-fragmentation/中了解。

 

二、我们应该适配哪些设备呢?

屏幕尺寸这么多,为了让我们开发的程序能够比较美观的显示在不同尺寸、分辨率、像素密度(这些概念我会在下面详细讲解)的设备上,那就要在开发的过程中进行处理,至于如何去进行处理,这就是我们今天的主题了。但是在开始进入主题之前,我们再来探讨一件事情,那就是Android设备的屏幕尺寸,从几寸的智能手机,到10寸的平板电脑,再到几十寸的数字电视,我们应该适配哪些设备呢?

对于具有相同像素密度的设备来说,像素越高,尺寸就越大,所以我们可以换个思路,将问题从单纯的尺寸大小转换到像素大小和像素密度的角度来。

这张图是我从太平洋手机网上截取的部分选购选项,我们可以通过观察发现,市场上主流的手机分辨率和屏幕尺寸并没有第一章中的图表现的那么恐怖。


所以说,我们只要尽量适配这几种分辨率,就可以在大部分的手机上正常运行了。这只是手机的适配,对于平板设备(电视也可以看做是平板),我们还需要一些其他的处理。

 

三、Android屏幕适配的概念

Q1:什么是屏幕尺寸、屏幕分辨率、屏幕像素密度? 

屏幕尺寸指屏幕的对角线的长度,单位是英寸,1英寸=2.54厘米,比如常见的屏幕尺寸有2.4、2.8、3.5、3.7、4.2、5.0、5.5、6.0等,其中2.4,2.8,3.5都已经比较少见,3.7被部分手机提供商以4.0屏宣称混淆视听。

 

屏幕分辨率是指在横纵向上的像素点数,单位是px,1px=1个像素点。一般以纵向像素*横向像素,如1960*1080。

 

屏幕像素密度是指每英寸上的像素点数,单位是dpi,即“dot per inch”的缩写。屏幕像素密度与屏幕尺寸和屏幕分辨率有关,在单一变化条件下,屏幕尺寸越小、分辨率越高,像素密度越大,反之越小。
Q2:什么是dp、dip、dp、sp、px?他们之间的关系是什么? 

px像素单位,大多数情况下,比如UI设计、Android原生API都会以px作为统一的计量单位,像是获取屏幕宽高等。

dip和dp是一个意思,都是Density Independent Pixels的缩写,即密度无关像素,上面我们说过,dpi是屏幕像素密度,假如一英寸里面有160个像素,这个屏幕的像素密度就是160dpi,那么在这种情况下,dp和px如何换算呢?在Android中,规定以160dpi为基准,1dip=1px,如果密度是320dpi,则1dip=2px,以此类推。

假如同样都是画一条320px的线,在480*800分辨率手机上显示为2/3屏幕宽度,在320*480的手机上则占满了全屏,如果使用dp为单位,在这两种分辨率下,160dp都显示为屏幕一半的长度。这也是为什么在Android开发中,写布局的时候要尽量使用dp而不是px的原因。

而sp,即scale-independentpixels,与dp类似,但是可以根据文字大小首选项进行放缩,是设置字体大小的御用单位。
Q3:什么是mdpi、hdpi、xdpi、xxdpi?如何计算和区分?

mdpi、hdpi、xdpi、xxdpi用来修饰Android中的drawable文件夹及values文件夹,用来区分不同像素密度下的图片和dimen值。Google官方指定按照下列标准进行区分:

在设计图标时,对于五种主流的像素密度(MDPI、HDPI、XHDPI、XXHDPI 和 XXXHDPI)应按照 2:3:4:6:8 的比例进行缩放。例如,一个启动图标的尺寸为48x48 dp,这表示在 MDPI 的屏幕上其实际尺寸应为 48x48 px,在 HDPI 的屏幕上其实际大小是 MDPI 的 1.5 倍 (72x72 px),在 XDPI 的屏幕上其实际大小是 MDPI 的 2 倍 (96x96 px),依此类推。


虽然 Android 也支持低像素密度 (LDPI) 的屏幕,但无需为此费神,系统会自动将 HDPI 尺寸的图标缩小到 1/2 进行匹配。

下图为图标的各个屏幕密度的对应尺寸:

 

四、解决方案

(1)解决布局问题

        由于适配问题比较麻烦,开发者希望通过简单的方法来解决这一类问题,比如用wrap_content、match_parent、weight或者相对布局和绝对布局来进行简单的适配,在布局中称为软编码

要确保布局的灵活性并适应各种尺寸的屏幕,应使用 “wrap_content” 和 “match_parent” 控制某些视图组件的宽度和高度。使用 “wrap_content”,系统就会将视图的宽度或高度设置成所需的最小尺寸以适应视图中的内容,而 “match_parent”(在低于 API 级别 8 的级别中称为 “fill_parent”)则会展开组件以匹配其父视图的尺寸。如果使用 “wrap_content” 和 “match_parent” 尺寸值而不是硬编码的尺寸,视图就会相应地仅使用自身所需的空间或展开以填满可用空间。此方法可让布局正确适应各种屏幕尺寸和屏幕方向。

       使用weight权重来设计布局,可以不用详细的计算dp的值。假设屏幕的宽为L,我们定义两个button  设置它们的属性

 

 

<Button
   
android:layout_weight="2"
   
android:layout_width="match_parent"
   
android:layout_height="match_parent"
   
android:text="Chenteachar"
   
/>
<Button
   
android:layout_weight="1"
   
android:layout_width="match_parent"
   
android:layout_height="match_parent"
   
android:text="Chenteachar"

 

 

在手机上显示的效果为右图所示:

 

 

 

如果我们将

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值