zoukankan      html  css  js  c++  java
  • android和屏幕适配的相关知识

    当需要适配不同的屏幕的时候,可能需要用到以下几点:

    关于单位的一点说明:
    1. dip: device independent pixels(设备独立像素). 不同设备有不同的显示效果,这个和设备硬件有关,一般我们为了支持WVGA、HVGA和QVGA 推荐使用这    这个,不依赖像素。

         dip的换算:
               dip(value)=(int) (px(value)/1.5 + 0.5)
    2. dp: 很简单,和dip是一样的。
    3. px: pixels(像素),不同的设备不同的显示屏显示效果是相同的,这是绝对像素,是多少就永远是多少不会改变。
    4.  sp: scaled pixels(放大像素). 主要用于字体显示best for textsize。


    备注: 根据google的推荐,像素统一使用dip,字体统一使用sp  
    举个例子区别px和dip:
    px就是像素,如果用px,就会用实际像素画,比个如吧,用画一条长度为240px的横线,在480宽的模拟器上看就是一半的屏宽,而在320宽的模拟器上看就是2/3的屏宽了。
    而dip,就是把屏幕的高分成480分,宽分成320分。比如你做一条160dip的横线,无论你在320还480的模拟器上,都是一半屏的长度。

    一、获取屏幕的分辨率(宽和高,单位是px)

    public void getScreenWidthAndHeight(){
            Display display=getWindowManager().getDefaultDisplay() ;
            screenWidth=display.getWidth();
            screenHeight=display.getHeight();         
            
        }
        

    不过,经过实验发现,在activity中直接调用以下方法也能够获得:

        screenHeight=this.screenHeight;
            screenWidth=this.screenWidth;

    不过不晓得,为什么很少有使用这种方法直接获得的。(其实利用方法一也可以获得对应的密度信息)

        //获取屏幕密度和长宽的另外一种方法
        public void getDensityAndResolution(Context context){
            DisplayMetrics displayMetrics = context.getResources().getDisplayMetrics();
            //获得相对密度(0.75,1.0.1.5等)
            float density=displayMetrics.density;
            //绝对密度,也就是每个英寸有多少个像素点
            int densityDpi=displayMetrics.densityDpi;
            //获取屏幕的宽度(单位px)
            screenWidth=displayMetrics.widthPixels;
            //获取屏幕的高度(单位px)
            screenHeight=displayMetrics.heightPixels;
            System.out.println("density:"+density+";densityDpi:"+densityDpi+";screenWidth"+screenWidth+";screenHeight:"+screenHeight);
        }

    三、sp和px之间的转换


        public static int dip2px(Context context, float dipValue) {
            //密度代表的是一英寸有多少个显示点
            //分辨率代表长×宽分别为多少个像素点
            final float scale = context.getResources().getDisplayMetrics().density;
            System.out.println("density:" + scale);
            return (int) (dipValue * scale + 0.5f);
        }
    
        public static int px2dip(Context context, float pxValue) {
            final float scale = context.getResources().getDisplayMetrics().density;
            return (int) (pxValue / scale + 0.5f);
        }

    也可以借助typevalue类:

        public int dip2px(int dip){
            int px;
            DisplayMetrics displayMetrics=new DisplayMetrics();
            displayMetrics.setToDefaults();
            px=(int)TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, dip, displayMetrics);
            return px;
        }

    其他类似

    四、获取某个控件的长度和宽度
    详见这篇博客

    http://blog.csdn.net/johnny901114/article/details/7839512

    五,获得获取控件的宽度、高度,已经获取屏幕状态栏、标题栏更详细的讲解可以参照这篇博客

    http://www.iteye.com/topic/828830

    Android 获取屏幕高度、标题高度、状态栏高度详解

    六、动态更改控件的布局

    有些可以通过控件本身的属性函数进行更改(如padding),有些布局属性则不行。此时可以利用其外围iewGroup控件对应的layoutParams来进行布局,通过设置其addRule方法

  • 相关阅读:
    Objective-C 调用C++,C
    ios项目不能再用UDID了
    xcode 4 制作静态库详解
    Icon specified in the Info.plist not found under the top level app wrapper: Icon.png
    吼吼 尬English
    Redis
    处理android 经典蓝牙发送文件时接收包的问题
    Md5加密的文件流中是否会包含其md5值
    Android gradle buid failed case
    Android GDB 调试
  • 原文地址:https://www.cnblogs.com/bobodeboke/p/3070061.html
Copyright © 2011-2022 走看看