28

アクティビティが完全に読み込まれ、レイアウトされ、描画され、ユーザーのタッチ コントロールの準備ができた正確な瞬間にコードを実行する方法が必要です。どのメソッド/リスナーがそれを行いますか?

4

5 に答える 5

28

コモンズウェアは正しいです。あなたが何をしようとしているのか、その理由を説明しなければ、あなたの質問に答えることはできません。詳細については、おそらく間違った方法で考えているのではないかと思います。

ただし、すべてを測定した後、非常にファンキーなレイアウト作業を行う必要があるコードがいくつかあります。

レイアウト内の各ビュー クラスを拡張してオーバーライドすることもできましたonMeasure()が、それは大変な作業でした。だから、私はこれをやった。素晴らしいことではありませんが、うまくいきます。

mainMenuLayout は、ファンキーにするために必要なレイアウトです。onGlobalLayoutコールバックは、レイアウトの描画が完了すると呼び出されます 。Utils.setTitleText()ファンキーが発生する場所であり、mainMenuLayout を渡すと、すべての子ビューの位置とサイズにアクセスできます。

mainMenuLayout.getViewTreeObserver().addOnGlobalLayoutListener(
            new ViewTreeObserver.OnGlobalLayoutListener() {

                @Override
                public void onGlobalLayout() {

                    // only want to do this once
                    mainMenuLayout.getViewTreeObserver().removeGlobalOnLayoutListener(this);

                    // set the menu title, the empty string check prevents sub-classes
                    // from blanking out the title - which they shouldn't but belt and braces!
                    if (!titleText.equals("")){
                        Utils.setTitleText(_context,mainMenuLayout,titleText);
                    }

                }
            });
于 2012-04-24T17:52:05.750 に答える
17

Runnableメッセージ キューに投稿すると、アクティビティのコンテンツが描画された後に実行されることがわかりました。たとえば、 a の幅と高さが必要な場合はView、次のようにします。

view.post( new Runnable() {

    @Override
    public void run() {

        int width = view.getWidth(); // will be non-zero
        int height = view.getHeight(); // will be non-zero
    }
} );

に電話した後はいつでもこれで成功しましたsetContentView()

于 2012-04-24T17:33:10.913 に答える
0

onRestoreInstanceStateメソッドは、onResumeの後に呼び出されるUI状態を復元するために呼び出されるメソッドです。このonRestoreInstanceStateメソッドを使用して、savedInstanceStateからUI状態を復元した後にコードを配置できると思います。

于 2012-04-24T17:27:03.740 に答える
-1

多分それはほとんど役に立ちません:

@Override
public void onAttachedToWindow(){}
于 2015-12-17T10:08:25.043 に答える