您的位置:首页 > 其它

手机屏幕适配

2016-02-01 18:02 218 查看
手机屏幕适配:

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

一共五种适配模式:

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

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,不能是包括内容或填充满父元素**

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

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

zhengjiaovip@163.com
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: