2016-08-10 2 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; 반환 안드로이드의 값 : 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 나는 그가 두 사람에 대해 혼란 스럽다고 생각하지 않는다. 단지 하나는 얻을 수 있지만 다른 것은 얻을 수 없다는 것과 왜 그가 getGravity()를 할 수 없는지에 대한 질문이다. – Doomsknight

답변

2

LinearLayoutgetGravity() 방법은 API 24로 시작하여 공개되었습니다. 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" /> 

생성자에서 중력 속성을 가져옵니다.

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을 참조하십시오.

관련 문제