在做facebook登录时,正好看到其SDK中一段代码,可以根据屏幕像素适配自己的控件的大小,虽然自己以前也做过类似的逻辑,但不如人家的逻辑来的严谨,这里贴出来学习一下:
// width below which there are no extra margins
private static final int NO_PADDING_SCREEN_WIDTH = 480;
// width beyond which we're always using the MIN_SCALE_FACTOR
private static final int MAX_PADDING_SCREEN_WIDTH = 800;
// height below which there are no extra margins
private static final int NO_PADDING_SCREEN_HEIGHT = 800;
// height beyond which we're always using the MIN_SCALE_FACTOR
private static final int MAX_PADDING_SCREEN_HEIGHT = 1280;
private void calculateSize() {
WindowManager wm = (WindowManager) getContext().getSystemService(Context.WINDOW_SERVICE);
Display display = wm.getDefaultDisplay();
DisplayMetrics metrics = new DisplayMetrics();
display.getMetrics(metrics);
// always use the portrait dimensions to do the scaling calculations so we always get a portrait shaped
// web dialog
int width = metrics.widthPixels < metrics.heightPixels ? metrics.widthPixels : metrics.heightPixels;
int height = metrics.widthPixels < metrics.heightPixels ? metrics.heightPixels : metrics.widthPixels;
int dialogWidth = Math.min(
getScaledSize(width, metrics.density, NO_PADDING_SCREEN_WIDTH, MAX_PADDING_SCREEN_WIDTH),
metrics.widthPixels);
int dialogHeight = Math.min(
getScaledSize(height, metrics.density, NO_PADDING_SCREEN_HEIGHT, MAX_PADDING_SCREEN_HEIGHT),
metrics.heightPixels);
getWindow().setLayout(dialogWidth, dialogHeight);
}
// the minimum scaling factor for the web dialog (50% of screen size)
private static final double MIN_SCALE_FACTOR = 0.5;
/**
* Returns a scaled size (either width or height) based on the parameters passed.
* @param screenSize a pixel dimension of the screen (either width or height)
* @param density density of the screen
* @param noPaddingSize the size at which there's no padding for the dialog
* @param maxPaddingSize the size at which to apply maximum padding for the dialog
* @return a scaled size.
*/
private int getScaledSize(int screenSize, float density, int noPaddingSize, int maxPaddingSize) {
int scaledSize = (int) ((float) screenSize / density);
double scaleFactor;
if (scaledSize <= noPaddingSize) {
scaleFactor = 1.0;
} else if (scaledSize >= maxPaddingSize) {
scaleFactor = MIN_SCALE_FACTOR;
} else {
// between the noPadding and maxPadding widths, we take a linear reduction to go from 100%
// of screen size down to MIN_SCALE_FACTOR
scaleFactor = MIN_SCALE_FACTOR +
((double) (maxPaddingSize - scaledSize))
/ ((double) (maxPaddingSize - noPaddingSize))
* (1.0 - MIN_SCALE_FACTOR);
}
return (int) (screenSize * scaleFactor);
}
分享到:
相关推荐
用于Android屏幕适配尺寸资源文件的生成
Android屏幕适配Android屏幕适配Android屏幕适配Android屏幕适配Android屏幕适配
Android屏幕适配尺寸生成类,直接导入工程运行,即可生成Android中屏幕的个尺寸下的values文件,非常使用!
这是一篇关于Android屏幕适配的介绍
Android屏幕适配smallestWidth适配尺寸文件,大部分尺寸,下载放在src/main/res下
用了vue - echarts - datav-elementul大屏数据可视化方案,包含屏幕适配方案等比例缩放, 等比例缩放的屏幕适配方法。可以让你不需要大量使用百分比或者转换之类的方法去写屏幕自适应大小,而是可以用部分px直接写...
android屏幕适配方案,做到了全适配
Android万能尺寸适配方法 以px为单位适配,你也可以根据自己的需求改成dp为单位的适配 http://blog.csdn.net/prczhb/article/details/76737407
Android开发之屏幕适配values资源,直接复制到res文件夹下,引用即可实现屏幕适配
A low-cost Android screen adaptation solution (今日头条屏幕适配方案终极版,一个极低成本的 Android 屏幕适配方案)
A low-cost Android screen adaptation solution (今日头条屏幕适配方案终极版,一个极低成本的 Android 屏幕适配方案). Overview Pixel 2 XL | 1440 x 2880 | 560dpi: Pixel XL | 1440 x 2560 | 560dpi: ...
android屏幕适配方法
Android 屏幕适配 百分比 eclipse项目,Google最新提供适配方案
android屏幕适配 ,生成values-1280x720,values-1920x1080等的工具
Android屏幕适配生成文件
介绍Android手机适配,大、中、小屏手机的处理办法以及图片如何处理。
android 可以根据数值动态改变控件的大小的控件 常用控件都是可以改变的,根据参数值,里面的控件可以实现自动适配大小 按比例显示出来,效果非常棒(开玩笑的,下了就知道了)
研究了以前同事留下的适配方案和网神hongyang大牛提供的方案,特整理了两套完美的android屏幕适配工具类,和详细的使用demo,可以根据px适配,也可以根据dp适配。适配原理可参考hongyang的博客,若还不会或者不会用...
Android 智能屏幕适配工具,便捷有效
Android对屏幕规格适配的代码例子。用于演示app在不同屏幕规格下的显示适配处理,包括手机与平板、横屏与竖屏等不同情况下的屏幕规格适配。