5

ScrollViewアクティビティの起動時に、レイアウトxmlファイルで定義されている高さを取得する必要があります。これを実装するためのベストプラクティスはどれですか。onCreate()、、の中にコードを配置してみましonStart()onResume()。すべて、起動時に高さを0にします。活動のような方法はありますonFinishInflate()か?

これが私のコードです:

myScroll=(ScrollView) findViewById(R.id.ScrollView01);
int height=myScroll.getHeight();
4

2 に答える 2

6

あなたはこのようなことをすることができます:

ScrollViewへの最終参照を取得します(onGlobalLayout()メソッドでアクセスします)。次に、ScrollViewからViewTreeObserverを取得し、OnGlobalLayoutListenerを追加して、onGLobalLayoutをオーバーライドし、このリスナーで測定値を取得します。

final ScrollView myScroll = (ScrollView)findViewById(R.id.my_scroll);
ViewTreeObserver vto = myScroll.getViewTreeObserver();
vto.addOnGlobalLayoutListener(new OnGlobalLayoutListener() {

    @Override
    public void onGlobalLayout() {
        LayerDrawable ld = (LayerDrawable)myScroll.getBackground();
        height = myScroll.getHeight();
        width=myScroll.getHeight();
        ViewTreeObserver obs = myScroll.getViewTreeObserver();
        obs.removeOnGlobalLayoutListener(this);
    }

});

このスレッドでもっと見る:

ビューの寸法を取得するにはどうすればよいですか?

于 2012-10-24T10:47:36.663 に答える
1

レイアウトが実行された、ビューの境界を照会する必要があります。推奨される場所はonWindowFocusChanged(boolean)です。詳細については、この質問を参照してください:ビューの絶対座標を取得する方法

また、レイアウトクラスをあえて拡張する場合、たとえばのサブクラスを作成するLinearLayout場合は、次の方法でonLayout()をオーバーライドできます。

@Override
public void onLayout(boolean changed, int l, int t, int r, int b) {
    super.onLayout(changed, l, t, r, b);

    myScroll=(ScrollView) findViewById(R.id.ScrollView01);
    int height=myScroll.getHeight();
}
于 2012-10-24T10:46:03.093 に答える