2

Android.support.v4.view.ViewPager과 함께 사용하는 Fragment 클래스가 있습니다.OnCreateView에서 뷰를 팽창시킬 때, 생성 직후 정확한 크기를 갖는 것으로 간주됩니까?

다음 OnCreateView에서

, 즉은, 내가 레이블을 만들고 난 동적 레이블의 높이의 비율로 라벨 내부의 글꼴 크기를 설정하려는 다른 페이지를 표시 할 필요가 호출기에 의해 호출된다

class LabelFragment : Android.Support.V4.App.Fragment 
{ 
    public override View OnCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) 
    { 
     base.OnCreate(savedInstanceState); 

     var v = inflater.Inflate(Resource.Layout.Label, container, false); 

     float BigFontSize = v.Height/1.5f; 
     float MediumFontSize = v.Height/5.0f; 
     float SmallFontSize = v.Height/10.0f; 

     // Setting font sizes for the children of v 

     return v; 
    } 
} 

이 코드를 작성할 때 은 팽창 직후 올바른 WidthHeight을 갖습니다.

실제로이 방법은 에뮬레이터와 일부 장치에서 작동하지만 다른 장치에서는 0 글꼴 크기가 할당되어 레이블 하위 요소가 사라집니다. 즉, v.Height은 0입니다.

이 코드가 유효합니까? Inflate에 의해 반환 된 뷰의 치수가 올바른지 여부가 문서화되어 있습니까? 대신 container에서 높이를 가져야하며, 그렇다면 ViewPager과 함께 사용할 때 null이 아닌 것으로 문서화됩니까?

답변

1

보기가 아직 OnCreateView 메서드에서 그려지지 않은 것이 문제입니다. 따라서 Height은 예상치 못한 값일 수 있습니다.

좋아요, 그럼보기의 높이를 얻으려면 어떻게해야할까요? 같은 PreDraw 이벤트를 얻을 수 ViewTreeObserver를 사용

v.ViewTreeObserver.PreDraw += (s, e) => 
{ 
    // do height calculations here 
}; 

은 또한 당신이 글꼴 크기를 사용하는 발견, 당신이 그 (것)들을 위해 픽셀의 높이를 사용하고 있지 않은지을 대신 (SP)를 확장 장치를 사용하십시오. 이것은 아마도 당신이 처음에 글꼴 크기를 설정하는 이유 일 것입니다.

+1

안녕하세요, 여기를 참조하십시오 http://stackoverflow.com/questions/33415509/get-height-width-of-imageview-from-android-support-v4-fragmentalways-return-zer 동일한 문제가 있습니다. . 또한 PreDraw는 나를 위해 일하지 않았다; – XTL

관련 문제