Android适配方案小结(二)

该节主要记录从代码中获取与屏幕适配相关的各个参数:

Java代码如下

public class ScreenUtil {

    /**
     * Note:
     * 只有activity可以使用getWindowManager,否则应该使用
     * Context.getResources().getDisplayMetrics()来获取
     */

    /**
     * 获取DisplayMetric相关参数
     * @param context
     * @return
     */
    public static String getMetricParams(Activity context){
        DisplayMetrics dm = new DisplayMetrics();
        context.getWindowManager().getDefaultDisplay().getMetrics(dm);
        return "density:"+dm.density+";densityDpi:"+dm.densityDpi
                +";height:"+dm.heightPixels+";width:"+dm.widthPixels
                +";scaledDensity:"+dm.scaledDensity+";xdpi:"+dm.xdpi
                +";ydpi:"+dm.ydpi;
    }

    /**
     * 获取屏幕尺寸,单位为像素
     * @param context
     * @return
     */
    public static String getScreenSizeInInPixels(Activity context){
        DisplayMetrics dm = new DisplayMetrics();
        context.getWindowManager().getDefaultDisplay().getMetrics(dm);
        double heightInInPixels = (double)dm.heightPixels;
        double widthInInPixels = (double)dm.widthPixels;
        return "高:"+heightInInPixels+" 宽:"+widthInInPixels+" 单位(像素)";
    }

    /**
     * 获取屏幕尺寸,单位为英寸
     * 计算屏幕尺寸应该使用精确密度:xdpi ydpi来计算
     * 使用归一化密度:densitydpi是错误的,它是固定值,
     * 120 160 240 320 480,根据dp计算像素才使用它
     * @param context
     * @return
     */
    public static String getScreenSizeInInch(Activity context){
        DisplayMetrics dm = new DisplayMetrics();
        context.getWindowManager().getDefaultDisplay().getMetrics(dm);
        double heightInInch = (double)dm.heightPixels / (double)dm.ydpi;
        double widthInInch = (double)dm.widthPixels / (double)dm.xdpi;
        double ScrrenSizeInInch = Math.sqrt(heightInInch*heightInInch
                + widthInInch*widthInInch);
        return "高:"+heightInInch+" 宽:"+widthInInch+" 尺寸:"+ScrrenSizeInInch
                +" 单位(英寸)";
    }

    /**
     * 获取屏幕尺寸,单位为dp
     * @param context
     * @return
     */
    public static String getScreenSizeInInDp(Activity context){
        DisplayMetrics dm = new DisplayMetrics();
        context.getWindowManager().getDefaultDisplay().getMetrics(dm);
        float heightInInDp = px2dip((Context)context, (float)dm.heightPixels);
        float widthInInDp = px2dip((Context)context, (float)dm.widthPixels);
        return "高:"+heightInInDp+" 宽:"+widthInInDp+" 单位(dp)";
    }

    /**
     * dp转px
     * @param context
     * @param dpValue
     * @return
     */
    public static int dip2px (Context context, float dpValue){
        final float scale = context.getResources().getDisplayMetrics().density;
        return (int)(dpValue*scale+0.5f);
    }

    /**
     * px转dp
     * @param context
     * @param pxValue
     * @return
     */
    public static int px2dip(Context context, float pxValue){
        final float scale = context.getResources().getDisplayMetrics().density;
        return (int)(pxValue/scale+0.5f);
    }

}

XML的设置:

<support-screens
android:anyDensity = "true"
android:largeScreens = "true"
android:normalScreens = "true"
android:resizeable = "true"
android:smallScreens = "true
android:xlargeScreens = "true">
android:anyDensity = "true"时,应用程序安装在不同的密度的终端上面,
程序分别会去加载xxhdpi, xhdpi, hdpi, mdpi,ldpi文件夹中的资源。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值