2012-03-25 13 views
5

フラグメント互換性ライブラリを使用しており、フラグメントの幅を取得しようとしていますが、これはFrameLayoutに追加されています。フラグメントライフサイクルに従って、onCreateViewが実行されるまで、getView()。getMeasuredWidth()は0を返すべきです。しかし、onCreateViewの後に来るonStart()では0が返されるため、返される値は0であってはなりません。onStart()のフラグメント幅を取得する

この異常が起こっているのはなぜ

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
android:orientation="horizontal" 
android:layout_width="fill_parent" 
android:layout_height="fill_parent"> 
<FrameLayout android:id="@+id/details" 
     android:layout_width="fill_parent" 
     android:layout_height="fill_parent" 
     android:background="@drawable/carbon_fiber"/> 

これは、我々が知りたいの幅断片でありますか?どんな助けもありがとう。

+1

: –

答えて

-1

あなたのフラグメントのクラスでandroid:classを定義する必要があると思います。

1

ただ仮定だが、Android Developersに従って:

ONSTART()(その含有活性に基づいて開始される)ユーザに見える断片を行います。

幅と高さはと計算されます。の後にフラグメントが表示されます。

しかし、おそらく、私は正しくないです。

3

アクティビティと同様に、ビュー階層のビューはFragment :: onStart()で測定されていません。ビューのサイズを取得するには、OnGlobalLayoutListenerを作成し、次のようにそれを使用する必要があります:私は活動と同じ問題に遭遇した

Android get Fragment width

0

。私は4:6の比率を維持するために私のイメージの一つが必要でした。私が断片のために見つけることができるほどシンプルなので、OnWindowFocusChanged()のOnStartFocusChanged()にコードを入れました。したがって、測定されたコンポーネントはありません。周囲にはさまざまな工夫がありますが、これは私にとっては最も速い実装に見えました。 IMOこれは、Androidの最もイライラと非直感的な部分である

getView().post(new Runnable(){ 
    @Override 
    public void run(){ 
    //do your measurements here 
    } 
}); 
0

は似たような状況で、私は、Viewクラスのポスト()メソッドを使用していました。これについては、多くのポストがあります。 GoogleチームがActivity/Fragmentにコールバックを追加すると思いますが、 `yourFrigginViewsHaveDimensionsNow()`のようなものが良いでしょう。
関連する問題