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

来源:互联网 发布:淘宝网商银行存钱吗 编辑:程序博客网 时间:2024/06/03 09:46

关于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;}