2011-09-19 55 views
72

如何從活動獲取視圖的保證金值?視圖可以是任何類型。獲取視圖的保證金

經過一番搜索,我找到了一種方法來獲得視圖的填充,但找不到任何邊緣。誰能幫忙?

我想是這樣的,

ViewGroup.LayoutParams vlp = view.getLayoutParams(); 
int marginBottom = ((LinearLayout.LayoutParams) vlp).bottomMargin; 

這工作,但在上面的代碼我假定認爲是一個LinearLayout。但即使我不知道視圖類型,我也需要獲取margin屬性。

回答

136

試試這個:

View view = findViewById(...) //or however you need it 
LayoutParams lp = (LayoutParams) view.getLayoutParams(); 

利潤通過

lp.leftMargin; 
lp.rightMargin; 
lp.topMargin; 
lp.bottomMargin; 

編輯訪問: 也許ViewGroup.MarginLayoutParams會爲你工作。這是其他LayoutParams的基類。

ViewGroup.MarginLayoutParams lp = (ViewGroup.MarginLayoutParams) view.getLayoutParams(); 

http://developer.android.com/reference/android/view/ViewGroup.MarginLayoutParams.html

+5

其實我期待這樣的事情,但我不認爲有任何直接的類叫做LayoutParams '。有一些類像'FrameLayout.LayoutParams','RelativeLayout.LayoutParams',但是它本身沒有像'LayoutParams'。由於我不知道視圖的類型,我不能使用任何前一類。 –

+4

'ViewGroup.MarginLayoutParams lp =(ViewGroup.MarginLayoutParams)view.getLayoutParams();'然後呢? – Vladimir

+0

應該是ViewGroup.MarginLayoutParams lp =(ViewGroup.MarginLayoutParams)view.getLayoutParams(); – rockhammer

4

現在使用這個編輯的代碼。這將幫助你

FrameLayout.LayoutParams lp=(FrameLayout.LayoutParams)mainLayout.getLayoutParams(); 

lp.leftMargin // for left margin 
lp.rightMargin // for right margin 
+0

您提到的方法給出了視圖的左側,右側,頂部和底部位置,我需要邊距。 –

+0

保證金在這個意義上說從左到右有多長...... –

+0

不一定。一個視圖可能放置在一個'LinearLayout'中,並且具有'horizo​​ntal'方向。如果它在佈局中的第二個視圖中使用了'view.getLeft()'方法,它會給我它左邊的座標,但是它的相鄰視圖中的視圖的左邊距。 –

2

正如其他建議,layout_margin#是父母的#邊緣和視圖之間的空間。

  • #替換 「左」, 「右」, 「頂」 或 「底」

獲取/設置頁邊距的工作對我來說有:

ViewGroup.MarginLayoutParams params = (ViewGroup.MarginLayoutParams) mView.getLayoutParams(); 
params.topMargin += 20; 
mView.requestLayout(); 

當然,我的觀點確實是一個ViewGroup,父母也是一個ViewGroup。在大多數情況下,您應該將佈局參數轉換爲父級的View類LayoutParams(在本例中爲ViewGroup和RelativeLayout)。