[解決済み】レイアウトが描画されたことを確認する方法は?
2022-04-07 18:34:37
質問
スクロール可能なビットマップを画面に描画するカスタムビューがあります。それを初期化するために、私は親レイアウトオブジェクトのピクセル単位のサイズを渡す必要があります。しかし、onCreateとonResume関数の間、レイアウトはまだ描かれていないため、layout.getMeasuredHeight()は0を返します。
回避策として、1秒待って測定するハンドラを追加しました。これは動作しますが、ずさんで、レイアウトが描画される前に終了するまでにどれだけ時間を短縮できるのか見当もつきません。
私が知りたいのは、レイアウトが描画されたことを検出するにはどうすればいいのか、ということです。イベントやコールバックがあるのでしょうか?
解決方法は?
レイアウトにツリーオブザーバーを追加することができます。これにより、正しい幅と高さが返されるはずです。
onCreate()
は、子ビューのレイアウトが行われる前に呼び出されます。そのため、幅と高さはまだ計算されていません。高さと幅を得るには、これを
onCreate()
メソッドを使用します。
final LinearLayout layout = (LinearLayout) findViewById(R.id.YOUR_VIEW_ID);
ViewTreeObserver vto = layout.getViewTreeObserver();
vto.addOnGlobalLayoutListener (new OnGlobalLayoutListener() {
@Override
public void onGlobalLayout() {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN) {
layout.getViewTreeObserver()
.removeOnGlobalLayoutListener(this);
} else {
layout.getViewTreeObserver()
.removeGlobalOnLayoutListener(this);
}
int width = layout.getMeasuredWidth();
int height = layout.getMeasuredHeight();
}
});
関連
-
[解決済み】コンテンツには、id属性が「android.R.id.list」であるListViewが必要です。
-
[解決済み】Android 8:クリアテキストのHTTPトラフィックが許可されない
-
[解決済み] android.os.NetworkOnMainThreadException' を修正するにはどうすればよいですか?
-
[解決済み] Androidのソフトキーボードをプログラムで閉じる/隠すにはどうすればよいですか?
-
[解決済み] インスタンス状態の保存を使用してアクティビティ状態を保存するにはどうすればよいですか?
-
[解決済み] アプリケーションからAndroidのWebブラウザでURLを開くにはどうすればよいですか?
-
[解決済み] 残念ながらMyAppは停止してしまいました。どうすればよいですか?
-
[解決済み] Androidのレイアウトで文字に下線を引くことはできますか?
-
[解決済み] Androidレイアウトのフォルダにサブフォルダを含めることはできますか?
-
[解決済み】プログレスダイアログとバックグラウンドスレッドがアクティブなときに、画面の向きが変わるのをどう処理するか?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】まだ警告が出る:設定 'compile' は時代遅れで 'implementation' に置き換わった。
-
[解決済み】OnFragmentInteractionListenerを実装する方法
-
[解決済み】"ビットマップが大きすぎてテクスチャにアップロードできない"
-
[解決済み】起動アクティビティを特定できませんでした。デフォルトのアクティビティが見つかりませんでした
-
[解決済み】findViewByIDがnullを返す。
-
[解決済み】android.content.ActivityNotFoundException: 明示的なアクティビティクラスを見つけることができません。
-
[解決済み] sendUserActionEvent() は null です。
-
[解決済み] AndroidのADBデバイスが不正に
-
[解決済み] SDKの場所がandroid studioで見つからない
-
[解決済み] AndroidでBluetoothが有効かどうかのチェックに失敗する(REQUEST_ENABLE_BTを変数に解決できない)。