Android
계산 된 뷰 치수 얻기
수색…
비고
View
인스턴스와 연관된 ViewTreeObserver
인스턴스는 View
가 아직 ViewTreeObserver
상태 일 때 유효하지 않게 될 수 있습니다. View.getViewTreeObserver
javadocs :
// The returned ViewTreeObserver observer is not guaranteed to remain
// valid for the lifetime of this View. If the caller of this method keeps
// a long-lived reference to ViewTreeObserver, it should always check for
// the return value of {@link ViewTreeObserver#isAlive()}.
따라서 이전에 ViewTreeObserver
인스턴스에 리스너를 추가 한 후 제거하려는 경우 해당 View
인스턴스의 getViewTreeObserver
를 다시 호출하여 새로운 ViewTreeObserver
인스턴스를 수신하는 것이 가장 쉽습니다. (기존 인스턴스에서 isAlive
를 확인하는 것이 거의 효과가 없으므로 ViewTreeObserver
가 더 이상 존재하지 않으면 어쨌든 새로운 참조를 가져 ViewTreeObserver
됩니다!)
활동에서 초기 뷰 크기 계산하기
package com.example;
import android.os.Bundle;
import android.support.annotation.Nullable;
import android.util.Log;
import android.view.View;
import android.view.ViewTreeObserver;
public class ExampleActivity extends Activity {
@Override
protected void onCreate(@Nullable final Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_example);
final View viewToMeasure = findViewById(R.id.view_to_measure);
// viewToMeasure dimensions are not known at this point.
// viewToMeasure.getWidth() and viewToMeasure.getHeight() both return 0,
// regardless of on-screen size.
viewToMeasure.getViewTreeObserver().addOnPreDrawListener(new ViewTreeObserver.OnPreDrawListener() {
@Override
public boolean onPreDraw() {
// viewToMeasure is now measured and laid out, and displayed dimensions are known.
logComputedViewDimensions(viewToMeasure.getWidth(), viewToMeasure.getHeight());
// Remove this listener, as we have now successfully calculated the desired dimensions.
viewToMeasure.getViewTreeObserver().removeOnPreDrawListener(this);
// Always return true to continue drawing.
return true;
}
});
}
private void logComputedViewDimensions(final int width, final int height) {
Log.d("example", "viewToMeasure has width " + width);
Log.d("example", "viewToMeasure has height " + height);
}
}
Modified text is an extract of the original Stack Overflow Documentation
아래 라이선스 CC BY-SA 3.0
와 제휴하지 않음 Stack Overflow