天天看點

界面篇--螢幕适配基礎

直接進入正題:

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在性能方面更加優秀。

繼續閱讀