2012-12-08 3 views
1

뷰의 자식으로 컨트롤을 추가하는 공용 함수가있는 사용자 지정 뷰가있어서 내 액티비티에서 호출하려고합니다. 문제는 컨트롤을 배치하기 위해 함수에서 뷰의 크기를 알아야한다는 것입니다. 내 뷰는이 함수가 최종적인 다른 사용자 정의 뷰에서 상속하기 때문에 onMeasure를 재정의 할 수 없습니다. 나는 measureChildren을 오버라이드 (override)하려고 시도했지만 너무 늦게 호출된다. (뷰가 ​​놓여진 액티비티에 대해서도 onResume 이후에). 액티비티가 뷰에서 함수를 호출하기 전에 크기를 유지하려면 어떻게해야합니까? 당신은 픽셀의 디스플레이 크기를 원하는 경우컨트롤을 추가하기 전에 창 크기 가져 오기

답변

0

하나의 가능성은 사용하는 내부 방법이있어 다시 활동에서보기 설정 한 다음 속성을보기를 측정하는 것입니다.

전역 레이아웃 수신기를 사용하면 항상 저에게 잘 맞습니다. 레이아웃이 변경된 경우 상황을 다시 측정 할 수 있다는 장점이 있습니다. 무엇인가가 View.GONE로 설정되어있는 경우, 또는 아이 뷰가 추가 또는 삭제되었을 경우 http://developer.android.com/reference/android/view/ViewTreeObserver.OnGlobalLayoutListener.html

0

당신의 getSize를 사용할 수 있습니다

Display display = getWindowManager().getDefaultDisplay(); 
Point size = new Point(); 
display.getSize(size); 
int width = size.x; 
int height = size.y; 
+0

public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); // inflate your main layout here (use RelativeLayout or whatever your root ViewGroup type is LinearLayout mainLayout = (LinearLayout) this.getLayoutInflater().inflate(R.layout.main, null); // set a global layout listener which will be called when the layout pass is completed and the view is drawn mainLayout.getViewTreeObserver().addOnGlobalLayoutListener( new ViewTreeObserver.OnGlobalLayoutListener() { public void onGlobalLayout() { // at this point, the UI is fully displayed } } ); setContentView(mainLayout); 

는 잘 모르겠어요하지만 난 이해 문제는 단지 크기를 표시하지 특정 뷰의 크기에 대한이었다 – fgeorgiew