今天在動態設置子layout中的控件動態佈局的時候,老是設置不到合適的位置,查閱了很多資料,終於搞定!現記錄如下:
一、首先是獲取VIEW的位置介紹:
有四種方法:
getLocalVisibleRect ,
返回一個填充的Rect對象, 當前Rect大小,left,top取到的都是0,只有botton和right有效
getGlobalVisibleRect ,
獲取全局座標系的一個視圖區域, 返回一個填充的Rect對象;該Rect是基於總整個屏幕的
getLocationOnScreen ,計算該視圖在全局座標系中的x,y值,(注意這個值是要從屏幕頂端算起,包括了通知欄的高度)//獲取在當前屏幕內的絕對座標
getLocationInWindow ,計算該視圖在它所在的widnow的座標x,y值,//獲取在當前窗口的絕對座標
二、設置你的VIEW到指定位置
Rect imgRect = new Rect();
FrameLayout.LayoutParams focusItemParams = new FrameLayout.LayoutParams(10, 10);
selected.getGlobalVisibleRect(imgRect);
focusItemParams.leftMargin =imgRect.left;
focusItemParams.topMargin =imgRect.top;
focusItemParams.width = imgRect.width();
focusItemParams.height = imgRect.height();
selected.getLocationInWindow (viewPosition);
focusView.setLayoutParams(focusItemParams);//focusView爲你需要設置位置的VIEW
注:在設置位置的時候,父layout儘量使用framelayout或者relativlayout,當然如果你非要用linearlayout的話,就不要用權重了,不然到時候坐邊距和上邊距,你都不知道設置多少。