前段时间在网上看到了一个“网易音乐”屏幕适配的视频,然后根据其思路写了个适配的demo,运行在不同分辨率机器上,效果还可以,话不多说,下面直接开讲。
在日常开发中,UI妹子给出的设计图只是根据一个分辨率创作的,但是市面上手机的分辨率却多如牛毛,而且一般设计标注控件的单位都是px,而我们一般用的是dp;两个单位的转换麻烦至极,再遇到个吹毛求疵,几个像素都要扣的人,那就GG了。所以我们能不能直接就用px做单位,这样就和原设计图一模一样了不是。
说了这么多,其实这个实现思路也很简单,你UI根据某个分辨率创作的设计图,那我也根据你的分辨率进行布局,然后在实际运行中根据实际的分辨率计算出与布局时分辨率的倍数,然后动态计算再赋值,这样是不是就好了。
import android.app.Activity;
import android.content.Context;
import android.util.DisplayMetrics;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
public class ViewUtil {
private static ViewUtil viewUtil;
private int defHeight = 1280;//UI设计时的宽
private int defWidth = 720;//UI设计时的高
private float heightMultiple = 1;//高的倍数
private float widthMultiple = 1;//宽的倍数
public static ViewUtil getInstance() {
if (viewUtil == null) {
viewUtil = new ViewUtil();
}
return viewUtil;
}
public View getView(Context context, int layoutResID) {
getPhoneSize(context);
View view = LayoutInflater.from(context).inflate(layoutResID, null);
modifyViewSize(view);
return view;
}
private void modifyViewSize(View view) {
//判断该view是否是viewGroup,是则修改其大小,并遍历其中的子控件
if (view instanceof ViewGroup) {
ViewGroup viewGroup = (ViewGroup) v