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;}
阅读全文
0 0
- Android屏幕适配的一个另类方法....
- Android 一个另类的 '进度条' 效果
- 适配远程接口调用的另类方法
- 今天想到的一个另类的读文件的方法
- 一个关于android旋转屏幕界面的方法
- 一个另类有效的SQL2005转到SQL2000的方法
- android屏幕适配:一个很棒的屏幕适配文章
- Android官方提供的屏幕适配的全部方法
- android 游戏 不同分辨率 屏幕适配的方法
- android 游戏 不同分辨率 屏幕适配的方法
- Android屏幕适配的两种方法
- android 适配不同大小屏幕的方法
- 关于Android屏幕适配的一种方法
- 屏幕适配的方法
- 屏幕适配的方法
- Android 屏幕适配常用方法
- android的屏幕适配
- android的屏幕适配
- codeforces819B Mister B and PR Shifts -- 线段树
- 麦克风阵列波束形成
- Atom measures
- [AtCoder ARC077 .F] [字符串] [乱搞] SS
- python笔记
- Android屏幕适配的一个另类方法....
- Java Web实现统计网站用户访问量并持久化的问题
- NodeJS、npm安装配置,指定npm安装目录,可移植的node以及模块
- HDU5925-Coconuts
- 递归与分治策略之快速排序
- linux 压缩 解压的命令
- 一个刚学c语言的小菜鸡
- 加密工具类MD5Util
- 启动eclipse报错 Could not create the Java Virtual Machine