2012-06-12 2 views
0

조각이 들어있는 레이아웃이 있습니다. 레이아웃의 너비를 300dip으로 설정합니다.프래그먼트의 부모보기 크기를 자식 크기를 프로그래밍 방식으로 얻습니다.

부모의 300dip과 관련하여 프로그래밍 방식으로 자식의 너비를 계산하려고합니다.

"트릭"이있어서 weigths를 사용하거나 RelativeLayout이 작동하지 않아서 수학에서 XML을 사용할 수 없기 때문에 XML로 할 수 없습니다. I는 출력 용기를 얻을

public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { 
    Log.d("test", "container: " + container); 
    View view = inflater.inflate(R.layout.mylayout, container, false); 
    Log.d("test", "view width: " + view.getWidth()); 

    //do things with view 

    return view; 
} 

: 널 볼 폭 : 0 ~ I는 수 여기

는 MyFragment에서

<LinearLayout 
    android:layout_width="300dip" 
    android:layout_height="wrap_content" 
    android:orientation="vertical" 
    > 

    <fragment 
     android:id="@+id/tabbar" 
     android:name="com.test.MyFragment" 
     android:layout_width="fill_parent" 
     android:layout_height="wrap_content" /> 
</LinearLayout> 

메소드 거기 ... 포함하는 레이아웃 조각이며 프래그먼트 또는 이와 유사한 메소드에서 onMeasure 메소드를 찾을 수 없습니다.

답변

1

onCreateView은 레이아웃이 비정상적으로 시작되기 전에 호출되므로 height 또는 width이 없습니다. 레이아웃과 views이 그려지는 방식을 배우고 싶다면 View을 확장하여 자신의보기를 만들고 onLayout()을 구현할 수 있습니다. 당신이 구글이라면, 그 많은 예제가 있습니다.

+0

사용자 정의보기를 만드는 방법에 대해 생각했지만 조각 인 경우 어떻게해야할지 모르겠다 ... 조각 모음을 사용하여 탭보기를 만드는 방법에 대한이 예제를 따르면서 탭 모음도 조각 HTTP로 구현됩니다. : //neilgoodman.net/2012/03/12/working-with-fragments-on-android-part-2 that 's "customize" – Ixx

+0

Button이나 View를 확장하는 CustomButton과 같은보기를 만들거나 TextView를 사용하면 onLayout을 구현하여 버튼을 원하는대로 정확하게 배치 할 수 있습니다. 하지만 다시 표준 안드로이드 레이아웃 기능은 훨씬 간단한 방법으로 올바른 레이아웃을 제공 할 수 있어야한다고 생각합니다. – Christine

+0

네, 저도 압니다 만, 문제는 * fragment *로 해결하는 방법이었습니다. 왜냐하면 내가 사용하고있는 코드는 프래그먼트를 사용하기 때문에이를 사용자 정의하고 싶습니다. 일반적으로 잘못되었는지, 대신보기를 사용해야하는지는 모르겠습니다. "커스텀 조각"과 같은 것이 존재 하는가, 아니면 완전히 틀린가? – Ixx

0

난 당신이 프로그래밍 onActivityCreated 방법에서 부모 뷰 (있는 LinearLayout)의 크기를 찾을 수 있다고 생각 :

@Override 
public void onActivityCreated(Bundle savedInstanceState){ 
    super.onActivityCreated(savedInstanceState); 

    myActivityView = (LinearLayout) 
      getActivity().findViewById(((View) getView().getParent()).getId()); 

    myFragment = (RelativeLayout) getView().findViewById(R.layout.mylayout); 
//Change RelativeLayout to whatever your fragment is using 
} 

그래서 다음 myActivityView는 부모 뷰해야합니다.

그런 다음 부모 뷰의 크기를 얻을 수 onActivityCreated에 ViewTreeObserver를 사용할 수

편집 할 수 있습니다. myFragment는 조각이어야하므로 myActivityView에서 반환 된 치수를 기준으로 배치 할 수 있습니다. 행운을 빕니다.

+0

onActivityCreated 중에 배치됩니다.방금 시도한이 시점에서 모든보기의 너비와 높이가 여전히 0입니다. –

+0

OP와 마찬가지로 xml 파일에서 부모보기 너비를 설정하고 있습니까? 나는이 점을 어느 시점에서 사용하고 있다는 것을 확신한다. 일부 XML 파일과 일부 Java 파일을 게시하면 체크 아웃하는 것이 더 쉬울 수도 있습니다. –

+0

예, 부모는 match_parent/match_parent로 설정됩니다. –

관련 문제