Android 屏幕适配

Posted Vonnie Jade

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Android 屏幕适配相关的知识,希望对你有一定的参考价值。

android屏幕适配主要有五种方法:图片适配、布局适配、尺寸适配、权重适配、代码适配。前两种不太常用,后三种用的较多。

图片适配

  • 开启4种分辨率的模拟器
  • drawable的多个目录下放置内容不同但命名相同的图片
  • 运行程序,查看在不同模拟器上的显示效果
  • 常规做法: 美工只做一套1280*720的图片,放置在drawable-xhdpi的目录下, ImageView宽高指定为确定的值, 不包裹屏幕

布局适配

  • 针对特定分辨率,创建layout文件夹: layout-800x480, layout-land(表示横屏)
  • 800x480 和其他分辨率模拟器对比
  • 常规做法: 该方式不到万不得已,一般不用

尺寸适配

dp和px的关系:dp=px/设备密度
设备密度(density)的获取:

`float density = getResources().getDisplayMetrics().density;

? ?

根据这个,我们可以写一个dp互转pxUtil类,代码如下:

public static int dp2px(Context context,float dp)
{
float density=context.getResources().getDisplayMetrics().density;
return (int) (dp*density+0.5f);//+0.5 四舍五入
}

public static float px2dp(Context context,int px){
float density=context.getResources().getDisplayMetrics().density;
return px/density;
}

? ?

  • 常规设备密度: 320x240(0.75), 480x320(1), 800x480(1.5), 1280x720(2)
  • 设置dp, 在不同屏幕上查看显示的比例
  • 创建文件夹values-1280x720, dimens.xml中制定尺寸, 适配屏幕
  • 常规做法: 美工提供像素px, 我们使用前需要用px除以设备密度,转换成dp,写在布局文件中

当然,使用dp不能解决所有问题,比如800x480(竖屏)和1280x720(横屏),这种情况就不能只设定一个dp值了,我们可以将一般的值写在dimens.xml中,同时创建一个values-1280x720文件夹将1280x720屏幕的dp值写在这个文件夹中的dimens.xml里面。这样,当遇到1280x720的设备就会去加载values-1280x720文件夹中dimens.xml的值。

权重适配

我们知道,只有在LinearLayout布局中,才有layout_weight属性。这个属性用来控制LinearLayout布局中各个子组件按照一定比例显示。一般说来,layout_weight值越大,所占的比例就越大。计算公式是:某个组件宽度(或高度)占LinearLayout的比例是:本组件weight / LinearLayout内所有组件weight值的和。

代码适配

int width = getWindowManager().getDefaultDisplay().getWidth();
int height = getWindowManager().getDefaultDisplay().getHeight();

tv1.setLayoutParams(new LayoutParams((int)(width*0.5), (int)(height*0.2)));

常规做法: 如果是自定义的控件, 没有使用xml布局文件时, 可以在代码中动态设置宽高

以上是关于Android 屏幕适配的主要内容,如果未能解决你的问题,请参考以下文章

Android 屏幕适配屏幕适配基础概念 ① ( Android 与 iOS 屏幕宽高比种类 | 屏幕像素密度 DPI )

Android 屏幕适配

Android-屏幕适配全攻略(绝对详细)(一)

Android 屏幕适配总结

Android 屏幕适配总结

Android屏幕适配全攻略(最权威的Google官方适配指导)