0

フラグメントを含むレイアウトがあります。レイアウトの幅を 300dip としましょう。

親の 300dip に関連して、プログラムで子の幅を計算したいと考えています。

XMLにはいくつかの「トリック」があり、重みまたはRelativeLayoutを使用しても機能せず、数学を使用する必要があるため、XMLでは実行できません。

これは、レイアウトを含むフラグメントです...

<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>

MyFragment には次のメソッドがあります。

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;
}

出力コンテナ: null とビュー幅: 0 を取得しますが、フラグメントなどに onMeasure メソッドが見つかりません。

4

3 に答える 3

1

onCreateViewレイアウトが膨張する前に呼び出されるため、heightまたははありませんwidth。レイアウト と がどのように描画されるかをいじりたい場合はviews、独自のビューを作成し、 を拡張Viewして を実装できonLayout()ます。Google で検索すると、その例がたくさんあります。

于 2012-06-12T23:55:01.497 に答える
0

親ビュー(LinearLayout)のディメンションは、プログラムでonActivityCreatedメソッドで見つけることができると思います。

@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から返されたディメンションを基準にして配置できます。幸運を。

于 2012-06-13T00:06:55.313 に答える