Android屏幕适配

1. 什么是屏幕适配
Android中屏幕适配就是通过对尺寸单位、图片、文字、布局这四种类型的资源进行合理的设计和规划,在布局时合理利用各种类型的资源,让布局拥有适应能力,能在各种设备下保持良好的展现效果。


2. 尺寸适配
2.1 屏幕尺寸:
屏幕尺寸指屏幕的对角线的长度,单位是英寸,1英寸=2.54厘米
比如常见的屏幕尺寸有2.4、2.8、3.5、3.7、4.2、5.0、5.5、6.0等

2.2 dp、dip、dpi、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-independent pixels,与dp类似,但是可以根据文字大小首选项进行放缩,是设置字体大小的御用单位。

2.3 mdpi、hdpi、xdpi、xxdpi
其实之前还有个ldpi,但是随着移动设备配置的不断升级,这个像素密度的设备已经很罕见了,所在现在适配时不需考虑。
mdpi、hdpi、xdpi、xxdpi用来修饰Android中的drawable文件夹及values文件夹,用来区分不同像素密度下的图片和dimen值。
那么如何区分呢?Google官方指定按照下列标准进行区分:
这里写图片描述

我们可以做一个实验
1.在res下新建values-960x540,values-1184x720的文件夹,分别创建名为dimens.xml的文件。
这里写图片描述
2.在dimens.xml文件中

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <dimen name="app_width">50dip</dimen>
</resources>
<?xml version="1.0" encoding="utf-8"?>
<resources>
    <dimen name="app_width">400dip</dimen>

</resources>

3. 图片适配
首先来看一些Android屏幕适配相关的基本概念:
屏幕尺寸:单位为英寸(inch),也就是我们常说的手机屏幕是多少寸。这个尺寸指的是屏幕对角线的长度。
分辨率:屏幕高和宽的像素数, 现在常见的分辨率有640*480、1280*720、1920*1080。
px:像素,显示屏上的一个光点就是一个像素。
dp(dip):设备无关像素,Android上特有的一种度量单位。相同dp尺寸的图片在不同显示屏上看起来的大小是一样的。
sp: scaled pixels(可缩放像素),类似于dp,所不同的是大小会随着系统字体的调整而调整,适合于设置字体大小。
ppi: pixel per inch,每英寸的像素数,即屏幕密度。这个值是设备自己决定的,是写死的。同样尺寸的图片,手机的ppi越大,在屏幕上显示出来就会越小

如果系统没有在当前当前ppi对应的目录下找到需要的资源,就会依据一个策略去其他目录去寻找图片,这个策略是固定的,具体寻找图片的策略如下:
1、去ppi对应的目录去找,如果找到就拿来用。
2、如果没找到,就去比这个密度高一级的目录里面去找,如果找到就拿来用。
3、如果没找到就继续往上找。以此类推。
4、如果到了xxhdpi目录还没有找到的话,就会去比自身屏幕密度低一级的目录去找,如果低一级的目录>=hdpi,找到了就拿来用。
5、如果没找到, 就去mdpi目录去找, 如果找到了,就拿来用。
6、如果没找到,就去默认的drawble目录里去找, 如果找到了就拿来用。
7 、如果没找到,再去最低的ldpi目录里去找。如果找到了,就拿来用。
8、如果没找到, 那就是没找到了, 图片无法显示。
4. 9.png
9.PNG是安卓开发里面的一种特殊的图片,这种格式的图片通过ADT自带的编辑工具生成,使用九宫格切分的方法,使图片支持在android 环境下的自适应展示
这里写图片描述
- 左边黑线:纵向拉伸区域,必须要画的,控制纵向拉伸,如上图右侧第一个小图。
- 上边黑线:横向拉伸区域,必须要画的,控制横向拉伸,如上图右侧第二个小图。
- 右边黑线:可选,纵向内容显示区域
- 下边黑线:可选,横向内容显示区域

5. 文字国际化
Android中实现国际化相对来说还是简单的,因为Android有很独特的资源管理方式。代码可以不和资源发生关系,我们通常通过 R 文件提供的索引来间接的引用某一个资源。

把显示的字符串都转换成文件资源,再用代码代码提取,也就是把字符串存储在对应的values目录下。

(1).首先建立一个values资源文件values-en/放进对应的strings.xml。
这里写图片描述

<resources>
    <string name="app_name">SexMouth</string>

    <!-- TODO: Remove or change this placeholder text -->
    <string name="hello_blank_fragment">Hello blank fragment</string>
    <string name="text">hello</string>
</resources>
 <TextView
            android:id="@+id/tv_friend"
            android:text="@string/text"//在字体中引用
            android:textSize="20sp"
            android:gravity="center"
            android:layout_weight="1"
            android:layout_width="0dp"
            android:layout_height="match_parent" />
  1. 横竖屏屏幕适配**
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    tools:context="com.example.dfcn.sexmouth.VedioActivity">
<TextView
    android:text="视频加载中...."
    android:textSize="50sp"
    android:background="@mipmap/button_ts"
    android:layout_width="match_parent"
    android:layout_height="200dp" />
    <Button
        android:layout_width="match_parent"
        android:layout_height="50dp"
        android:text="点击播放"/>
</LinearLayout>

让后在res文件下创建一个layout_land,把你竖屏的布局写在里面

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值