天天看点

界面篇--屏幕适配基础

直接进入正题:

1、尽量使用 dp 及 sp , sp 一般用于字体的大小 , dp 用于控件的宽高。

2、weight的使用:

weight即比重

示例如下

控件1:

android:layout_width=”0dp”

android:layout_weight=”1”

控件2:

android:layout_width=”0dp”

android:layout_weight=”2”

控件1,2 同在LinearLayout 且 设置android:orientation=”horizontal”

则 控件1占据宽度的1/(1+2) 控件2占据2/(1+2)

注意事项:weight的比重计算是除去控件已占用后的大小的 。

示例如下:

父容器宽度为 160dp

控件1:

android:layout_width=”10dp”

android:layout_weight=”1”

控件2:

android:layout_width=”0dp”

android:layout_weight=”2”

结果: 控件1占60dp 控件2占100dp

计算方法 控件1大小= 控件1设置大小(10dp) + (总大小(160dp) - 使用的大小(10dp)) * 1/(1+2) ;

即 10 + (160 - 10) * 1 / ( 1 + 2 ) 。

3、这里介绍一种常见的适配方式,宽度靠比例适配,高度则按照效果图做下来,最后 高度通过如果有必要可以滚动条进行滚动浏览。

滚动条:ScrollView

使用中需注意 ScrollView里只能放一个子View

示例如下:

实例1

ScrollView

View

ScrollView

实例2

ScrollView

View

View

ScrollView

结果 实例1可行 实例2 不可行

4、java代码动态适配屏幕,这用处就大了。

首先是常用的工具方法,建议写成工具类放在项目中。

public final static int dp2px(Context context, float dpValue) {
    float density = context.getResources().getDisplayMetrics().density;
    return (int) (dpValue * density + 0.5f);
}
public final static int px2dp(Context context, float pxValue) {
    float density = context.getResources().getDisplayMetrics().density;
    return (int) (pxValue / density + 0.5f);
}   
 public static int sp2px(Context context, float spValue) {  
    final float fontScale = context.getResources().getDisplayMetrics().scaledDensity;  
    return (int) (spValue * fontScale + 0.5f);  
} 
           

我们来写一个例子 java代码中使得控件宽度占据屏幕宽度的1/7

DisplayMetrics dm = new DisplayMetrics();

getWindowManager().getDefaultDisplay().getMetrics(dm);

int width = dm.widthPixels; // 获得屏幕宽度 这个也可以写成工具方法 放到工具类里

int needWidth = width / 7 ;// 获得屏幕宽度的1/7

//利用LayoutParams设置控件宽度

android.view.ViewGroup.LayoutParams

lyViewParams= lyView.getLayoutParams();

lyViewParams.width = needWidth;

lyView.setLayoutParams(lyViewParams);

5、资源的适配。

主要是需要对应不同的分辨率请UI给出不同的图片资源,这不仅能适配不同的屏幕,使得显示效果更好, 而且,更能使得整个APP在性能方面更加优秀。

继续阅读