Android万能分辨率适应法

    (1)获取屏幕的尺寸

    WindowManager windowManager = (WindowManager) getSystemService(Context.WINDOW_SERVICE);
    Display d = windowManager.getDefaultDisplay();
    mWidth = d.getWidth();
    mHeight = d.getHeight();
    DisplayMetrics dm = getResources().getDisplayMetrics();
    mScreenDensity = dm.density;

    (2)美工设计图的尺寸

    uiWidth,uiHeight

    (3)获取缩放比例

    float scaleWidth = mWidth / uiWidth;
    float scaleHeight = mHeight/ uiHeight; 

    (4)所有布局的尺寸用代码实现:

    public static int getWidthSize(int size){
        return (int) (size * scaleWidth);
    }
    
    public static int getHightSize(int size){
        return (int) (size * scaleHeight);
    }
    
    public static float getTextSize(int pxSize){
        return (pxSize*scaleHeight) / mScreenDensity;
    }
    
    public static void setViewSize(int width, int height, View v){
        int paramWidth = getWidthSize(width);
        int paramHeight = getHightSize(height);
        ViewGroup.MarginLayoutParams params 
               = (ViewGroup.MarginLayoutParams) v.getLayoutParams();
        if (width != INVALID){
            params.width = paramWidth;
        }
        if (height != INVALID){
            params.height = paramHeight;
        }
        v.setLayoutParams(params);
    }
    
    public static void setViewPadding(int left, int top, int right, int bottom,
            View v){
        left = getWidthSize(left);
        top = getHightSize(top);
        right = getWidthSize(right);
        bottom = getWidthSize(bottom);
        v.setPadding(left, top, right, bottom);
    }
    
    
    public static void setViewMargin(int left, int top, int right, int bottom,
            View v){
        int paramLeft = getWidthSize(left);
        int paramTop =  getHightSize(top);
        int paramRight = getWidthSize(right);
        int paramBottom = getHightSize(bottom);
        ViewGroup.MarginLayoutParams params = (ViewGroup.MarginLayoutParams)
                     v.getLayoutParams();
        if (left != INVALID){
            params.leftMargin = paramLeft;
        }
        if (right != INVALID){
            params.rightMargin = paramRight;
        }
        if (top != INVALID){
            params.topMargin = paramTop;
        }
        if (bottom != INVALID){
            params.bottomMargin = paramBottom;
        }
        v.setLayoutParams(params);
    }

     

    本博客所有文章如无特别注明均为原创。
    复制或转载请以超链接形式注明转自Who am I ?,原文地址《Android万能分辨率适应法
    喜欢 | 0
    分享:

已经有1 条评论抢在你前面了~

  1. 沙发
    Lissa 2017-04-24

    That inhsigt’s perfect for what I need. Thanks!