您的位置:首页 > 移动开发 > Android开发

android和屏幕适配的相关知识

2013-05-09 21:50 447 查看
当需要适配不同的屏幕的时候,可能需要用到以下几点:

关于单位的一点说明:
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;
}


其他类似

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

/article/3711862.html

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

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

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

六、动态更改控件的布局

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

AbsListView.LayoutParams, AbsoluteLayout.LayoutParams, Gallery.LayoutParams, ViewGroup.MarginLayoutParams, ViewPager.LayoutParams, WindowManager.LayoutParams

ActionBar.LayoutParams, DrawerLayout.LayoutParams, FrameLayout.LayoutParams, GridLayout.LayoutParams, LinearLayout.LayoutParams, RadioGroup.LayoutParams, RelativeLayout.LayoutParams, SlidingPaneLayout.LayoutParams, TableLayout.LayoutParams, TableRow.LayoutParams
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: