3

テストの目的で、画面に表示されているすべてのビューの座標を取得する必要があります。ただし、出力を確認すると、UIスレッドはまだすべてのビューに設定の描画/配置/適用を行っていないようです。一部のビューは0x0ピクセルですが、表示されている必要があります(エミュレーターと物理デバイスの両方にあります)。下に揃えられたボタンの中には、階段などのように配置されているものがあります。

Q:UIスレッドが描画を完了するのを待つ(または少なくとも1秒ほど待つ、それで十分なはずです)ので、表示されているすべてのビューの座標が正確になるようにするにはどうすればよいですか?

スレッドの問題だと思いますが、明確な答えは見つかりませんでした。今のところ、自己申告のスレッドはありません。

編集:onBackPressedを使用して一連のビューを表示し、それをxmlでキャプチャし、前のビューを非表示にして他のビューを表示し、xmlでキャプチャします。ビューと「xml-screenshot」のいくつかの異なる組み合わせを繰り返します。 「各組み合わせ。

4

1 に答える 1

6
LinearLayout layout = (LinearLayout)findViewById(R.id.YOUD VIEW ID);
ViewTreeObserver vto = layout.getViewTreeObserver(); 
vto.addOnGlobalLayoutListener(new OnGlobalLayoutListener() { 
    @Override 
    public void onGlobalLayout() { 
        this.layout.getViewTreeObserver().removeGlobalOnLayoutListener(this); 
        int width  = layout.getMeasuredWidth();
        int height = layout.getMeasuredHeight(); 

    } 
});

レイアウトで機能するようにこれを調整し、基本的な親レイアウトにIDを追加する必要があります。

ViewTreeObserverを使用すると、レイアウトの描画が終了したことを確認し、必要なコードを実行できます。

于 2012-09-26T09:49:38.620 に答える