手机屏幕适配

手机屏幕适配:



在开发中美工一般只给一套图。所以就有屏幕适配;

一共五种适配模式
图片适配 : 根据手机的象素密度来选择不同文件夹中的图片进行适配
dimens适配 : 根据手机的象素密度来选择不同文件夹中的尺寸进行适配
布局适配 : 根据手机的象素密度来选择不同文件夹中的布局进行适配
代码适配 : 在java代码中动态设置控件的大小,进行适配
layout_weight权重适屏 : 巧妙利用线性布局的layout_weight属性进行适配

一般使用图片适配,代码适配,权重适屏

===========================================================================

图片适配 :  根据手机的象素密度来选择不同drawable文件夹中的图片 进行适配

比如小米NOTE是386的PPI

默认情况下,会根据手机的象素密度,加载对应drawable文件夹下的图片[note默认加载xxhdpi下的图片]
如果对应drawable文件夹下没有当前图片,会向上查找(向分辨率更高的文件夹中查找)[如果xxhdpi下没有图片会去xxxhdpi找]
如果向上找不到,才会向低分辨率的文件夹中去找。[如果xxhdpi和xxxhdpi都没图片会找xhdpi]

** 在开发中,让美工做一套大小适配市场上占比例最多的分辨率的图片**
------------------------------------------------------------------------------------

dimens尺寸适配

ldpi 的手机中  240 * 320 的屏幕
160 dp x 0.75 = 120 px 


mdpi 的手机  320 * 480 的屏幕
160 dp x1 = 160 px


xhdpi 手机 1280 * 720 的屏幕
160 dp x2 = 320 个像素 
屏幕的一半 为 360 个象素或  180 个 dp  

使用步骤:

1、 在values 文件夹中新建文件 dimens.xml ,将需要动态指定的尺寸声明成变量,在布局文件中由变量来引用
<resources>
 <dimen name="text_width">160dp</dimen> 
</resources>
2、创建不同分辨率下的尺寸的文件夹,如:values-xhdpi 在文件夹中创建文件 dimens.xml
<resources>
 <dimen name="text_width">180dp</dimen> 
</resources>  
这样,不同的手机中显示的text_width 根据手机象素密度的不同,就可以显示不同的值。

** 注意:文件夹的名称也可以直接指定分辨率 如 values-1280x720 其中x是xyz的x不是数字中的乘号
但这种写法,只能适配这一个分辨率,只有特殊情况下才用。

不同的象素密度下, dp 与 px 之间的转换关系

ldpi 1 dp  0.75 px
mdpi 1 dp  1    px
hdpi 1 dp  1.5  px
xhdpi 1 dp  2    px 

**使用的时候,还是使用dp,如果测试时发现不视频的机型,针对某种机型,做dimens适配。
------------------------------------------------------------------------------------------------------------------------------------

布局适配 : 根据手机的象素密度来选择不同layout文件夹中的布局进行适配

新建文件夹 layout-xhdpi 该文件夹用于存放 xhdpi 分辨率的手机所需的布局文件
如果该文件夹中没有需要的布局,就从layout 文件夹中查找默认的布局。

谷歌推荐做法,但一般不采用。layout布局编写非常麻烦,工作量大

**注意: 为不同分辨率的手机指定不同的布局文件,功能虽然强大,但如果布局较多,使用起来会非常繁琐,使用时要注意**
--------------------------------------------------------------------------------------------------------------------

代码适配 : 在java代码中动态设置控件的大小,进行适配 

在代码中根据屏幕的宽高,动态设置控件的大小:

TextView textView = (TextView) findViewById(R.id.textview);
//获取屏幕宽度
   int screenWidth = getResources().getDisplayMetrics().widthPixels;//屏幕宽度:px
// 指定textView的宽度为屏幕的 80%
int textViewWidth = (int) (screenWidth*0.8+0.5f);

LayoutParams params = new LayoutParams(textViewWidth, LayoutParams.WRAP_CONTENT);

textView.setLayoutParams(params);
-----------------------------------------------------------------------------------------------------------------------------------------------------

layout_weight 权重适配

线性布局的布局参数 layout_weight 不仅能指定控件计算大小的优先级
还可以,使用权重,按比例分配控件的大小。

** 注意,按比例分配大小的尺寸布局中要先声明为0dp,不能是包括内容或填充满父元素**

-----------------------------------------------------------------------------------------------------------------------------

初写博客,菜鸟一枚,如有错误,希望指出;

[email protected]

你可能感兴趣的:(手机屏幕适配)