[解決済み] Android SDKのgetWidth/Height()とgetMeasuredWidth/Height()の違いは何ですか?
質問
その Android ドキュメントによると によると、ビューには 2 種類のサイズがあります。 測定された寸法 と 図面寸法 . 測定された寸法は メジャーパス で計算されたものです (その onMeasure メソッド)、一方 図面寸法 は画面上の実際のサイズです。特に、ドキュメントに書かれている
これらの値は、測定された幅と高さとは異なるかもしれませんが、そうである必要はありません。
そこで質問ですが、図面寸法が測定された寸法と異なるのはなぜでしょうか?もし onMeasure(int,int) メソッドがレイアウトの要件 (パラメータとして与えられる widthMeasureSpec と 高さ指定 を追加した場合、SDKはどのようにビューが異なる描画サイズを持つべきであると決定することができますか?
さらに、どのように/どこで Android ソース コード で、計測した幅/高さを使って描画幅/高さを計算しているのでしょうか?を調べてみたのですが ソースコードを見る を調べてみましたが、測定された幅/高さが最終的な幅/高さの計算にどのように使用されるのかがわかりません。多分、パディングと関係があるのでしょうが、よくわかりません。
どのように解決するのですか?
measuredWidth/heightはその名の通り、測定とレイアウトの段階で使用されます。
例を挙げてみましょう。
ウィジェットは、200px × 200px の大きさにしたいと言いました。これはmeasureedWidth/heightです。
レイアウトフェーズの間、つまり onLayout メソッドで。メソッドは、その子のmeasureedWidth/heightを使用するか、ビューのlayoutメソッドを呼び出すことによって新しい幅/高さを割り当てることができます。
onLayoutメソッドがchildview.layout(0,0,150,150)を呼び、ビューの幅/高さが測定された幅/高さと異なっているとします。
私は、onLayoutメソッドの外側でmeasureedWidth/heightを使用しないことをお勧めします。
をまとめると.
- onMeasure -> measuredWidth/measuredHeightを設定する。
- onLayout ->ウィジェットの幅/高さを設定します。
さらに
public void View.layout(int l, int t, int r, int b)
は、位置とサイズの割り当てが行われる場所であるようです。
関連
-
[解決済み] Androidのgravityとlayout_gravityの違いは何ですか?
-
[解決済み] Androidの「コンテキスト」とは何ですか?
-
[解決済み] Androidアプリケーションのアクティビティ間でデータを受け渡すにはどうすればよいですか?
-
[解決済み] match_parentとfill_parentの違いは何ですか?
-
[解決済み] compileSdkVersionとtargetSdkVersionの違いは何ですか?
-
[解決済み] ビューのパディングとマージンの違いについて
-
[解決済み】「px」、「dip」、「dp」、「sp」の違いは?
-
[解決済み】Android : invisibleとgoneの違い?
-
[解決済み] CENTER_INSIDEとFIT_CENTERのスケールタイプはどう違うのですか?
-
[解決済み] 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 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] getApplication()、getApplicationContext()、getBaseContext()、someClass.thisの違いと使い分け。
-
[解決済み] Android Navigation Architecture Component - 現在表示されているフラグメントを取得する
-
[解決済み] wrap_contentでRelativeLayoutがフルスクリーンになってしまう
-
[解決済み] Gradleでビルドタイプを使用し、ContentProviderを使用する同じアプリを1つのデバイスで実行する。
-
[解決済み] ProjectScopeServices に Factory タイプのサービスはありません。
-
[解決済み] edittextのテキストがメールアドレスかどうかを確認するには?
-
[解決済み] proguard hell - 参照されているクラスが見つかりません。
-
[解決済み] Android APKファイルの中身を見るには?
-
[解決済み] Androidの環境設定。ユーザーが環境設定画面を使用していない場合、デフォルト値を読み込むにはどうすればよいですか?
-
[解決済み] ViewPager2でスワイプを無効にするには?