屏幕适配工具类

public class AutoUtils {

   private static int displayWidth;
   private static int displayHeight;
   
   private static int designWidth;
   private static int designHeight;
   
   private static double textPixelsRate;
   
   public static void setSize(Activity act, boolean hasStatusBar, int designWidth, int designHeight){
      if(act==null || designWidth<1 || designHeight<1)return;
      
        Display display = act.getWindowManager().getDefaultDisplay();
      int width = display.getWidth();
        int height = display.getHeight();
        
      if (hasStatusBar) {
         height -= getStatusBarHeight(act);
      }
      
      AutoUtils.displayWidth=width;
      AutoUtils.displayHeight=height;
      
      AutoUtils.designWidth=designWidth;
      AutoUtils.designHeight=designHeight;
      
      double displayDiagonal= Math.sqrt(Math.pow(AutoUtils.displayWidth, 2)+ Math.pow(AutoUtils.displayHeight, 2));
      double designDiagonal= Math.sqrt(Math.pow(AutoUtils.designWidth, 2)+ Math.pow(AutoUtils.designHeight, 2));
      AutoUtils.textPixelsRate=displayDiagonal/designDiagonal;   
   }
   
    public static int getStatusBarHeight(Context context)
    {
      int result = 0;
      try {
         int resourceId = context.getResources().getIdentifier(
               "status_bar_height", "dimen", "android");
         if (resourceId > 0) {
            result = context.getResources().getDimensionPixelSize(
                  resourceId);
         }
      } catch (Resources.NotFoundException e) {
         e.printStackTrace();
      }
      return result;
    }
    
    public static void auto(Activity act){
       if(act==null || displayWidth<1 || displayHeight<1)return;
       
       View view=act.getWindow().getDecorView();
       auto(view);
    }
    
    public static void auto(View view){
       if(view==null || displayWidth<1 || displayHeight<1)return;
       
       AutoUtils.autoTextSize(view);
       AutoUtils.autoSize(view);
       AutoUtils.autoPadding(view);
       AutoUtils.autoMargin(view);
       
       if(view instanceof ViewGroup){
          auto((ViewGroup)view);
       }
       
    }
    
    private static void auto(ViewGroup viewGroup){
       int count = viewGroup.getChildCount();
       
      for (int i = 0; i < count; i++) {

         View child = viewGroup.getChildAt(i);
         
         if(child!=null){
            auto(child);
         }
      }
    }
    
    public static void autoMargin(View view){
        if (!(view.getLayoutParams() instanceof ViewGroup.MarginLayoutParams))
            return;

        ViewGroup.MarginLayoutParams lp = (ViewGroup.MarginLayoutParams) view.getLayoutParams();
        if(lp == null)return ;

        lp.leftMargin = getDisplayWidthValue(lp.leftMargin);
        lp.topMargin = getDisplayHeightValue(lp.topMargin);
        lp.rightMargin = getDisplayWidthValue(lp.rightMargin);
        lp.bottomMargin = getDisplayHeightValue(lp.bottomMargin);
        
    }

    public static void autoPadding(View view){
        int l = view.getPaddingLeft();
        int t = view.getPaddingTop();
        int r = view.getPaddingRight();
        int b = view.getPaddingBottom();

        l = getDisplayWidthValue(l);
        t = getDisplayHeightValue(t);
        r = getDisplayWidthValue(r);
        b = getDisplayHeightValue(b);

        view.setPadding(l, t, r, b);
    }

    public static void autoSize(View view){
        ViewGroup.LayoutParams lp = view.getLayoutParams();

        if (lp == null) return;
        
        if(lp.width>0){
           lp.width = getDisplayWidthValue(lp.width);
        }

        if(lp.height>0){
           lp.height = getDisplayHeightValue(lp.height);
        }
        
    }
    
    public static void autoTextSize(View view){
       if(view instanceof TextView){
          double designPixels=((TextView) view).getTextSize();
          double displayPixels=textPixelsRate*designPixels;
          ((TextView) view).setIncludeFontPadding(false);
          ((TextView) view).setTextSize(TypedValue.COMPLEX_UNIT_PX, (float) displayPixels);
       }
    }

    public static int getDisplayWidthValue(int designWidthValue){
       if(designWidthValue<2){
          return designWidthValue;
       }
        return designWidthValue * displayWidth / designWidth;
    }

    public static int getDisplayHeightValue(int designHeightValue){
       if(designHeightValue<2){
          return designHeightValue;
       }
        return designHeightValue * displayHeight / designHeight;
    }
}

用法:

在Activity中设置:

        setContentView(view);
        AutoUtils.setSize(this, false, 750, 1334);
        AutoUtils.auto(this);
       
        //禁止横屏
        setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
        //禁止键盘挤压布局
        getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_ADJUST_PAN);

 

 

在清单文件中声明:

<meta-data
            android:name="design_width"
            android:value="750" />
        <meta-data
            android:name="design_height"
            android:value="1334" />

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值