`
lovelease
  • 浏览: 386013 次
社区版块
存档分类
最新评论

Android 根据屏幕尺寸适配控件尺寸(按比例缩放)

阅读更多
在做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图片缩放查看控件支持手势

    控件可能也考虑了不同屏幕尺寸和分辨率的适配,采用百分比布局或者基于屏幕密度的尺寸单位,使得图片可以在各种设备上正常显示。 9. **手势冲突处理** 当多个手势同时发生时,控件需要正确处理这些冲突。例如,...

    Android屏幕字体适配源码

    - **动态调整布局元素尺寸**:根据屏幕尺寸和设备密度,动态计算并设置控件的大小。 ```java int dpWidth = dpToPx(context, 100); // 自定义dp值 View view = findViewById(R.id.view); LayoutParams layoutParams ...

    fmx 手机屏幕自适应缩放比例

    在FMX中,处理屏幕适配主要涉及到屏幕尺寸、分辨率、像素密度(DPI)以及缩放比例的概念。 1. **屏幕尺寸与分辨率**: 屏幕尺寸通常以宽度和高度的像素值表示,而分辨率则指屏幕上的总像素数量。不同的手机屏幕...

    Android多分辨率适配

    1. 使用相对布局(RelativeLayout)和约束布局(ConstraintLayout):这些布局可以根据屏幕尺寸动态调整控件的位置和大小,避免硬编码像素值。 2. 使用权重(weight):在LinearLayout中,通过设置weight属性,可以...

    android屏幕适配demo

    "android屏幕适配demo"是一个实例,它展示了如何确保应用程序在不同设备上看起来一致并保持良好的用户体验。在这个demo中,主要关注的是视图大小的调整和布局管理,以实现跨设备的兼容性。 首先,Android提供了多种...

    可适配控件的对话框

    标签中的“缩放”指的是对话框的缩放能力,而“适配”则指的是控件如何根据对话框的缩放比例自动调整自身尺寸和位置。为了实现这一功能,开发者需要考虑控件的最小和最大尺寸,以及在不同缩放比例下的视觉效果。例如...

    Android studio通过切换不同layout实现横竖屏适配

    1. 不同屏幕尺寸和密度也可能需要适配,可以利用Android的密度独立像素(dp)和比例缩放资源(例如values-sw600dp等)来实现。 2. 避免硬编码控件的尺寸,而是使用权重(weight)或者相对布局(RelativeLayout)来...

    完整版控件自动缩放.rar

    例如,如果一个控件的原始尺寸为100x100像素,而新的屏幕尺寸要求其缩放为50%,则比例因子为0.5,将应用于每个维度。 3. **布局管理器**:在许多编程环境中,如Java的Swing或Android的LinearLayout,布局管理器帮助...

    屏幕适配Demo

    屏幕适配是移动应用开发中的一个重要环节,尤其是在Android和iOS平台上,由于设备种类繁多,屏幕尺寸和分辨率差异巨大,良好的屏幕适配策略能够确保应用在不同设备上呈现出一致的用户体验。本Demo主要关注的是如何...

    android纯代码适配工具类

    5. **屏幕适配比例计算**:`getScalingFactor()`可能是一个根据基准屏幕尺寸计算当前设备适配比例的方法,用于全局的尺寸适配。 6. **沉浸式状态栏处理**:可能包含`setStatusBarTransparent()`等方法,实现全屏...

    关于android开发屏幕适配的理解e.pdf

    以下是对Android屏幕适配的一些深入理解和实践要点。 首先,我们要了解屏幕分辨率和DPI(dots per inch,每英寸点数)的概念。屏幕分辨率指的是屏幕水平和垂直方向上的像素数量,例如320x480表示横轴320像素,纵轴...

    Android屏幕适配

    在Android开发中,屏幕适配是一项至关重要的任务,因为Android设备有着广泛的屏幕尺寸和分辨率,从小型手机到大型平板电脑不一而足。本篇内容将深入探讨Android屏幕适配的策略、方法以及最佳实践。 首先,理解...

    适配android各种机型demo

    1. **屏幕尺寸适配**:Android系统将屏幕尺寸分为小(small)、正常(normal)、大(large)和超大(xlarge)四种类型。开发者可以通过创建不同尺寸的layout文件夹(如layout-small、layout-normal等),在其中放置...

    android屏幕适配

    在Android开发中,屏幕适配是一项至关重要的任务,因为Android设备拥有广泛的屏幕尺寸、分辨率和密度,这使得应用能在各种设备上提供一致的用户体验成为挑战。"android屏幕适配"这个主题涵盖了如何确保你的应用程序...

    Android-ScreenMatchLib一个屏幕适配框架

    4. **动态适配**:ScreenMatchLib支持在运行时动态调整布局,确保界面元素在不同设备上按比例缩放。 三、使用步骤 1. **引入依赖**:在项目build.gradle文件中添加ScreenMatchLib的依赖,或者将库的源码导入项目。...

    android自动适应屏幕源码

    - **布局权重(layout_weight)**:在XML布局中,可以通过设置weight属性分配控件的宽度或高度,使它们在不同屏幕尺寸下保持相对比例。 - **百分比布局(PercentRelativeLayout, PercentFrameLayout)**:Google...

    安卓Android源码——android多分辨率适配 ,判断平板还是手机,等比例缩小图片.zip

    适配策略包括使用相对布局(RelativeLayout)、约束布局(ConstraintLayout)等,确保界面元素在不同屏幕尺寸上保持合理布局。 2. 判断设备类型: Android系统提供了`UiModeManager`接口和`Configuration`类,帮助...

    Android炫酷的星期日期选择控件RollWeekView

    此外,为了适配不同的设备和屏幕尺寸,我们还需要考虑控件的尺寸自适应和性能优化。 综上所述,创建一个如"RollWeekView"这样的自定义日期选择控件涉及到Android自定义视图、动画、触摸事件处理等多个技术点。通过...

    Android高级应用源码-android多分辨率适配 ,判断平板还是手机,等比例缩小图片.zip

    在处理图片时,有时需要根据屏幕尺寸或控件大小等比例地缩放图片,以避免失真。可以使用`BitmapFactory.Options`类来加载适合尺寸的图片。以下代码展示了如何等比例缩放图片: ```java Bitmap originalBitmap = ...

Global site tag (gtag.js) - Google Analytics