直接進入正題:
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在性能方面更加優秀。