2011-09-19 11 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'の向きで置くことができます。レイアウトの2番目のビューであれば、 'view.getLeft()'メソッドは、左の座標ですが、隣接するビューからのビューの左マージンを返します。 –

2

は、#をlayout_margin、親の#エッジとビューの間のスペースです。もちろん

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

、私のビュー:

  • #が "ボトム"、 "右"、 "トップ" または "左" 置き換え

を取得/設定マージンがして私のために働きました確かにViewGroupであり、親もViewGroupでした。ほとんどの場合、あなたは親のViewクラスのLayoutParamsにあなたのレイアウトのparamsをキャストする必要があります(この場合には、それはのViewGroupとRelativeLayoutだ)

関連する問題