2016-08-10 4 views
3

CustomViewから重力属性(android:gravity)を取得できません。カスタムビューでGravity()を取得するには?

XML

<MyCustomView 
... 
android:gravity="right" 
/> 

マイカスタムビュー。

class MyCustomView extends LinearLayout{ 
... 
@Override protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { 
    getGravity(); //Throws method not found exception 
    ((LayoutParams)getLayoutParams()).gravity; //This returns the value of android:layout_gravity 
    super.onMeasure(widthMeasureSpec, heightMeasureSpec); 
    } 
... 
} 

getGravity(); throwsメソッドが見つかりませんでした。

((LayoutParams)getLayoutParams()).gravity;は、Androidの値を返します。layout_gravity

は私がビューから重力属性を取得することができますとにかくありますか?

+2

まず、 'gravity'と' layout_gravity'は同じものではないことを理解する必要があります。 http://stackoverflow.com/documentation/android/94/layouts/398/gravity-and-layout-gravity#t=201608101551183172231 –

+4

私は仲間を知っています。私はあなたが質問ではっきりしていないと思う。私は私のJavaコードからXMLに入れた重力属性の値を取得したい。 layout_gravityではありません。 layout_gravityは取得できますが、重力は取得できません。 –

+2

@BartekLipinskiは、私は彼が1を取得することができますちょうどことを、彼は約2混乱していると思いますが、他ではない、との質問なぜ彼ができない 'getGravity()' – Doomsknight

答えて

2

getGravity()のメソッドLinearLayoutは、API24から始めて公開されました。This answerは、リフレクションを使用して以前のバージョンで取得する方法を示しています。

普通のカスタムビューでは、このように重力の属性にアクセスすることができます

があなたのcustom attributesandroid:gravity属性を宣言します。 Don't set the format.

<resources> 
    <declare-styleable name="CustomView"> 
     <attr name="android:gravity" /> 
    </declare-styleable> 
</resources> 

プロジェクトレイアウトxmlに重力を設定します。

<com.example.myproject.CustomView 
    ... 
    android:gravity="bottom" /> 

コンストラクタでgravity属性を取得します。

public class CustomView extends View { 

    private int mGravity = Gravity.START | Gravity.TOP; 

    public CustomView(Context context, AttributeSet attrs) { 
     super(context, attrs); 
     TypedArray a = context.getTheme().obtainStyledAttributes(
       attrs, R.styleable.CustomView, 0, 0); 

     try { 
      mGravity = a.getInteger(R.styleable.CustomView_android_gravity, Gravity.TOP); 
     } finally { 
      a.recycle(); 
     } 
    } 

    public int getGravity() { 
     return mGravity; 
    } 

    public void setGravity(int gravity) { 
     if (mGravity != gravity) { 
      mGravity = gravity; 
      invalidate();  
     } 
    } 
} 

またはその代わりにandroid:gravity属性を使用しての、あなたは同じフラグ値を使用して、独自のカスタムgravity属性を定義することができます。 this answerを参照してください。

関連する問題