web-dev-qa-db-ja.com

ビューのマージンを取得する

アクティビティからビューのマージン値を取得するにはどうすればよいですか?ビューはどのタイプでもかまいません。

少し検索した後、ビューのパディングを取得する方法を見つけましたが、Marginで何も見つかりませんでした。誰でも助けることができますか?

私はこのようなことを試みました、

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

これは機能しますが、上記のコードでは、ビューをLinearLayoutと想定しています。ただし、ビュータイプがわからない場合でも、margin属性を取得する必要があります。

92

これを試して:

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

マージンは

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

edit:おそらくViewGroup.MarginLayoutParamsはあなたのために働きます。他のLayoutParamsの基本クラスです。

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

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

172
Vladimir

試して

ViewGroup.MarginLayoutParams vlp = (MarginLayoutParams) view.getLayoutParams()

vlp.rightMargin
vlp.bottomMargin
vlp.leftMargin
vlp.topMargin

これにより、少なくとも私の見解では正しいマーゲインが返されました。

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

30
Freddroid

この編集済みコードを使用してください。これはあなたを助けます

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

lp.leftMargin  // for left margin
lp.rightMargin   // for right margin
4
ilango j

他の人が提案したように、layout_margin#は親の#Edgeとビューの間のスペースです。

  • #「左」、「右」、「上部」または「下部」を置き換えます

マージンの取得/設定は私のために働いた:

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

もちろん、私のViewは確かにViewGroupであり、親もViewGroupでした。ほとんどの場合、レイアウトパラメーターを親のViewクラスLayoutParams(この場合はViewGroupおよびRelativeLayout)にキャストする必要があります。

3
milosmns