Android屏幕适配的一个另类方法....

关于android手机屏幕适配,我至今没找到一个合适的方法....于是自己想了一个歪招。


原理也比较简单,例如大多手机的标准分辨率是1920 * 1080或1280 * 720


但是遇到1800 * 1080或1184 * 720的就麻烦了(何况有些手机还有虚拟按键状态栏),其实也简单,把1800当1920来用,1184当1280来用就OK了


使用代码如下:


//宽度默认为null既是全满,在findViewById时去适配,最后得到适配成功的View对象

ImageView img_two = (ImageView) (ScreenUtils.setViewHeight(context, findViewById(R.id.img_two), null, 0.16f);
 
 
本人菜鸟,大家有更好的方法,欢迎指点....



/**
 * View比例适配
 * @return
 */
public static View setViewHeight(Context context, final View view, Float width, float height) {
   L.i("父类布局:"+view.getParent().getClass().toString());
   //这里计算了不标准分辨率屏幕,强制把它当作变准的1920或1280的高度来适配,后续需要其他分辨率的话可以再添加
   int totalHeight = 0;
   if(ScreenUtils.getTotalHeight(context) > 1700 && ScreenUtils.getTotalHeight(context) < 1920) {
      totalHeight = 1920;
   }else if(ScreenUtils.getTotalHeight(context) > 1100 && ScreenUtils.getTotalHeight(context) < 1280) {
      totalHeight = 1280;
   } else {
      totalHeight = ScreenUtils.getTotalHeight(context);
   }

   if(width == null) {
      if(view.getParent().getClass().toString().equals("class android.widget.LinearLayout")) {
         LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(
               LinearLayout.LayoutParams.MATCH_PARENT,
               (int) (totalHeight * height + 0.5f));
         view.setLayoutParams(params);
         return view;
      }
      if(view.getParent().getClass().toString().equals("class android.widget.RelativeLayout")) {
         RelativeLayout.LayoutParams params = new RelativeLayout.LayoutParams(
               RelativeLayout.LayoutParams.MATCH_PARENT,
               (int) (totalHeight * height + 0.5f));
         view.setLayoutParams(params);
         return view;
      }
      if(view.getParent().getClass().toString().equals("class android.widget.FrameLayout")) {
         FrameLayout.LayoutParams params = new FrameLayout.LayoutParams(
               FrameLayout.LayoutParams.MATCH_PARENT,
               (int) (totalHeight * height + 0.5f));
         view.setLayoutParams(params);
         return view;
      }
   }else {
      if(view.getParent().getClass().toString().equals("class android.widget.LinearLayout")) {
         LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(
               (int) (ScreenUtils.getScreenWidth(context) * width + 0.5f),
               (int) (totalHeight * height + 0.5f));
         view.setLayoutParams(params);
         return view;
      }
      if(view.getParent().getClass().toString().equals("class android.widget.RelativeLayout")) {
         RelativeLayout.LayoutParams params = new RelativeLayout.LayoutParams(
               (int) (ScreenUtils.getScreenWidth(context) * width + 0.5f),
               (int) (totalHeight * height + 0.5f));
         view.setLayoutParams(params);
         return view;
      }
      if(view.getParent().getClass().toString().equals("class android.widget.FrameLayout")) {
         FrameLayout.LayoutParams params = new FrameLayout.LayoutParams(
               (int) (ScreenUtils.getScreenWidth(context) * width + 0.5f),
               (int) (totalHeight * height + 0.5f));
         view.setLayoutParams(params);
         return view;
      }
   }
   return null;
}



/**
 * 获得屏幕宽度
 * 
 * @param context
 * @return
 */
public static int getScreenWidth(Context context)
{
   WindowManager wm = (WindowManager) context.getSystemService(Context.WINDOW_SERVICE);
   DisplayMetrics outMetrics = new DisplayMetrics();
   wm.getDefaultDisplay().getMetrics(outMetrics);
   return outMetrics.widthPixels;
}

/**
 * @param context
 * @return 获取屏幕内容高度不包括虚拟按键
 */
public static int getScreenHeight(Context context) {
   WindowManager wm = (WindowManager) context
         .getSystemService(Context.WINDOW_SERVICE);
   DisplayMetrics outMetrics = new DisplayMetrics();
   wm.getDefaultDisplay().getMetrics(outMetrics);
   return outMetrics.heightPixels;
}

/**
 * @param context
 * @return 获取屏幕原始尺寸高度,包括虚拟功能键高度
 */
public static int getTotalHeight(Context context) {
   int dpi = 0;
   WindowManager windowManager = (WindowManager) context.getSystemService(Context.WINDOW_SERVICE);
   Display display = windowManager.getDefaultDisplay();
   DisplayMetrics displayMetrics = new DisplayMetrics();
   @SuppressWarnings("rawtypes")
   Class c;
   try {
      c = Class.forName("android.view.Display");
      @SuppressWarnings("unchecked")
      Method method = c.getMethod("getRealMetrics", DisplayMetrics.class);
      method.invoke(display, displayMetrics);
      dpi = displayMetrics.heightPixels;
   } catch (Exception e) {
      e.printStackTrace();
   }
   return dpi;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值