私は、ビューのラッパーのviewTreeObserverに添付されたOnGlobalLayoutListenerを使用して、ビューのラッパーのgetHeight()関数へのコールバックに依存するアクティビティー内のビューにアンドロイド・アプリケーションを作成して、 onCreateの間に動作しなければなりません。通常、これは以下のxmlでchordDisplayによって要求された400ピクセル未満です。これはアンドロイドエミュレータで完璧に動作し、アンドロイド2.1と4.03を使用するさまざまな画面サイズに対応しています。しかし、私のライトでは、向きをポートレートに変えて風景に戻すまで(手動でもコードでも)、アプリケーションをランドスケープで起動すると、コールバックは正しい高さに戻りません(400px未満)。これは、私のビューの内容のサイズが正しくないことを意味します。奇妙な火災の火災のレイアウトの問題
私は当初、風景の中にアプリを起動サンプルlogcat出力:私はこれが起こっする方法を理解していない
04-22 17:32:44.546: D/onGlobalLayout(12979): chordDisplay.getHeight(): 350
:
04-22 17:31:28.249: D/onGlobalLayout(12979): chordDisplay.getHeight(): 400
は、私が風景に戻っ肖像画に切り替えて、オリエンテーションの変更中に起こるすべてのことが、アプリケーションのonCreate()へのもう1つの呼び出しであると考えています。私がアプリを起動したときと同じことが起こります。
誰もが、アプリの向きの切り替えやレイアウトのバグに似た経験がありますか?/これがどうして起こるのか、考えてください。どんな助けでも高く評価されるでしょう...ありがとう。
コード:
OnGlobalLayoutListener thelistener;
RelativeLayout chordDisplayWrapper;
TableRow.LayoutParams lp;
private ChordAdapter chordAdapter;
private HorizontalListView chordDisplay
thelistener = new OnGlobalLayoutListener() {
@Override
public void onGlobalLayout() {
chordDisplayWrapper.getViewTreeObserver().removeGlobalOnLayoutListener(this);
Log.d("onGlobalLayout", "chordDisplay.getHeight(): " + chordDisplay.getHeight());
lp = new TableRow.LayoutParams(chordDisplay.getHeight()/6 -2,chordDisplay.getHeight()/6 -2); //6 just works. I shrink it a tiny bit to compensate for some weird bug.
chordAdapter = (new ChordAdapter(mcontext, R.layout.row, magicbundle, lp));
chordDisplay.setAdapter(chordAdapter);
}
};
chordDisplayWrapper.getViewTreeObserver().addOnGlobalLayoutListener(thelistener);
関与ビューの
のxmlレイアウト:
<RelativeLayout
android:id="@+id/chordDisplayWrapper"
android:layout_width="wrap_content"
android:layout_height="0dip"
android:layout_weight="1"
android:gravity="center" >
<berry.chordsfree.HorizontalListView
android:id="@+id/testerList"
android:layout_width="wrap_content"
android:layout_height="400px"
android:layout_centerInParent="true"
android:gravity="center" />
</RelativeLayout>