手机屏幕适配:
在开发中美工一般只给一套图。所以就有屏幕适配;
一共五种适配模式:
图片适配 :
根据手机的象素密度来选择不同文件夹中的图片进行适配
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]