創建及使用MarginLayoutParmas
MarginLayoutParams
是繼承自ViewGroup.LayoutParmas
,創建時直接new一個對象即可;但一般我們可以這麼做:
先獲取
View
本身的LayoutParams
對象,檢測是否屬於一個MarginLayoutParmas
對象,如果是直接修改屬性值即可;如果不是,需要以原有佈局參數對象爲基礎,創建一個新的MarginLayoutParams
對象,再進行屬性設置
ViewGroup.LayoutParams params = view.getLayoutParams();
ViewGroup.MarginLayoutParams marginParams = null;
//獲取view的margin設置參數
if (params instanceof ViewGroup.MarginLayoutParams) {
marginParams = (ViewGroup.MarginLayoutParams) params;
} else {
//不存在時創建一個新的參數
//基於View本身原有的佈局參數對象
marginParams = new ViewGroup.MarginLayoutParams(params);
}
創建一個MarginLayoutParams
時,需要以View本身的佈局參數對象爲基礎,否則可能丟失一些原本的佈局屬性.
通用的設置margin屬性的方法
/**
* 設置某個View的margin
*
* @param view 需要設置的view
* @param isDp 需要設置的數值是否爲DP
* @param left 左邊距
* @param right 右邊距
* @param top 上邊距
* @param bottom 下邊距
* @return
*/
public static ViewGroup.LayoutParams setViewMargin(View view, boolean isDp, int left, int right, int top, int bottom) {
if (view == null) {
return null;
}
int leftPx = left;
int rightPx = right;
int topPx = top;
int bottomPx = bottom;
ViewGroup.LayoutParams params = view.getLayoutParams();
ViewGroup.MarginLayoutParams marginParams = null;
//獲取view的margin設置參數
if (params instanceof ViewGroup.MarginLayoutParams) {
marginParams = (ViewGroup.MarginLayoutParams) params;
} else {
//不存在時創建一個新的參數
marginParams = new ViewGroup.MarginLayoutParams(params);
}
//根據DP與PX轉換計算值
if (isDp) {
leftPx = getPxFromDpi(left);
rightPx = getPxFromDpi(right);
topPx = getPxFromDpi(top);
bottomPx = getPxFromDpi(bottom);
}
//設置margin
marginParams.setMargins(leftPx, topPx, rightPx, bottomPx);
view.setLayoutParams(marginParams);
return marginParams;
}