アクティビティが完全に読み込まれ、レイアウトされ、描画され、ユーザーのタッチ コントロールの準備ができた正確な瞬間にコードを実行する方法が必要です。どのメソッド/リスナーがそれを行いますか?
5 に答える
コモンズウェアは正しいです。あなたが何をしようとしているのか、その理由を説明しなければ、あなたの質問に答えることはできません。詳細については、おそらく間違った方法で考えているのではないかと思います。
ただし、すべてを測定した後、非常にファンキーなレイアウト作業を行う必要があるコードがいくつかあります。
レイアウト内の各ビュー クラスを拡張してオーバーライドすることもできました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);
}
}
});
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()
。
onRestoreInstanceStateメソッドは、onResumeの後に呼び出されるUI状態を復元するために呼び出されるメソッドです。このonRestoreInstanceStateメソッドを使用して、savedInstanceStateからUI状態を復元した後にコードを配置できると思います。
多分それはほとんど役に立ちません:
@Override
public void onAttachedToWindow(){}