レイアウトの高さと幅をプログラムで取得する
2023-08-23 01:26:29
質問
私は、以下のようなレイアウトを設計しました。
LinearLayout
には2つの子
LinearLayout
と
FrameLayout
で、それぞれの子には異なるビューを配置します。
の高さと幅を測定したかっただけです。
FrameLayout
を測定したかっただけです。
私が使っているプログラムでは
int height,width;
FrameLayout fr=(FrameLayout)findviewbyid(R.id.fr);
height=fr.getHeight();
width=fr.getWidth();
は値を
0
となります。
以下のコードで試してみました。 int height,width;
FrameLayout fr=(FrameLayout)findviewbyid(R.id.fr);
height=fr.getMeasuredHeight();
width=fr.getMeasuredWidth();
は同じ値を返す
0
で、最後に以下のコードで試してみました。 int height,width;
FrameLayout fr=(FrameLayout)findviewbyid(R.id.fr);
height=fr.getgetLayoutParams().height();
width=fr.getLayoutParams().width;
は私を返します
-2
と
-1
任意のレイアウトの高さと幅をプログラム的に取得するソリューションが欲しいのですが?
どのように解決するのですか?
ビュー自体は、基本的に以下のような独自のライフサイクルを持っています。
-
アタッチされる
-
測定値
-
レイアウト
-
描画
例えば、onCreateメソッドで実行する場合、その時点ではビューの計測が行われていない可能性があります。一方、ボタンのonClickメソッドで実行する場合、その時点でビューのアタッチ、計測、レイアウト、および描画が行われている可能性があるので、期待通りの値を確認することができますが、正しいタイミングで値を取得していることを確認するためにViewTreeObserverを実装すべきです。
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) {
this.layout.getViewTreeObserver().removeGlobalOnLayoutListener(this);
} else {
this.layout.getViewTreeObserver().removeOnGlobalLayoutListener(this);
}
int width = layout.getMeasuredWidth();
int height = layout.getMeasuredHeight();
}
});
関連
-
[解決済み] Androidのgravityとlayout_gravityの違いは何ですか?
-
[解決済み] TextViewでテキストを水平・垂直方向にセンタリングするには?
-
[解決済み] Androidで画面の幅と高さを取得する
-
[解決済み] ImageViewの幅と高さをプログラムで設定する?
-
[解決済み] Androidのソフトキーボードをプログラムで閉じる/隠すにはどうすればよいですか?
-
[解決済み] match_parentとfill_parentの違いは何ですか?
-
[解決済み] Androidのレイアウトファイルの「tools:context」とは何ですか?
-
[解決済み] Androidのレイアウトで文字に下線を引くことはできますか?
-
[解決済み】「px」、「dip」、「dp」、「sp」の違いは?
-
[解決済み] Picassoで画像を全幅・固定高にリサイズする
最新
-
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 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] 実行時にAndroidのビューのサイズを決定する
-
[解決済み] Android Webview - キャッシュを完全に削除する
-
[解決済み] 深くネストされたスタックから離れるとき、Fragmentのバックスタックをクリーンアップする方法はこれで良いのでしょうか?
-
[解決済み] Androidのソースコードにある@hideの意味とは?
-
[解決済み] アンドロイドアプリのユーザーデータを消去する
-
[解決済み] AsyncTaskを複数回実行する
-
[解決済み] キャンバスに複数行のテキストを描画する
-
[解決済み] グリッドビューの高さが削減される
-
[解決済み] サポートライブラリのアクションバーをPreferenceActivityに追加するには?
-
[解決済み] ブルートゥースアプリケーションのテストにアンドロイドエミュレータを使用するには?