問題タブ [onmeasure]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
java - View.onMeasure() はいつ呼び出されますか?
時である
呼ばれた?onMeasureが呼び出された後にアクションを実行する必要があるアクティビティがあります。
私の質問は、ここに投稿された未回答の質問と同じです。ビューのドキュメントには、 requestLayout()が呼び出されたときに onMeasure が呼び出されると記載されています。これは、ビューが現在の境界内に収まらないと判断したときに、それ自体のビューによって呼び出されたようです。
ただし、これは、アクティビティがいつビューが測定されたと想定できるかを教えてくれません。このコードを使用してImageViewを拡張し、TouchImageView を形成しました。ここで、 onMeasureメソッドを使用して画像をスケーリングする必要があることが提案されました。イメージがスケーリングされたパーセンテージを表示するために、 ImageViewが測定された後にTextViewの値を更新したいと考えています。
android - カスタム ボタンの背景が正しく描画されない (ときどき)
私は自分自身を描画せず、子ビューを持たないこのカスタムボタンを持っています。アプリの起動直後は、次のようになります。
この時点で、ここに投稿するのにどのコードと詳細が関連するかわかりません。事実は、アプリが状態を変更した後、ボタンが留まるVISIBLE
か行くかをチェックすることINVISIBLE
です。残っていVISIBLE
ます。呼び出しsetVisibility(View.VISIBLE)
た後、画面が再び表示されると、次のようになります。
ボタンをクリックすると、元の背景の寸法で正常に戻ります。
これまでに何を
したか Androidソースまでコードをデバッグしました。
最初 onDraw()
; 私はそこに電話をかけるsuper.onDraw();
だけで、背景ではなくテキストのみを処理しているように見えます.
2番目 onMeasure()
; super.onMeasure();
ここでも;と呼ぶだけです。初めて表示する前に数回 (11) 回呼び出され、表示後に 5 回呼び出されsetVisibility()
ます。ボタンをクリックしてもまったく呼び出されません。
3 つ目 onTouchEvent()
は、ボタンをクリックしたときに呼び出されます。の別の色の背景を設定しACTION_DOWN
、元の色の背景を復元しますACTION_UP
これらはボタンのログです:
詳細は、関連性があると判断された場合にオンデマンドで掲載されます。
android - セルをリサイクルするアダプターを使用したandroid gridviewヘッダーソリューション
グリッドの残りの部分と一緒にスクロールする gridview ヘッダーを実装する方法について、多くの解決策を見てきました。
それらのほとんどは、ヘッダービューとグリッドビューをすべてスクロールビュー内に持つリストレイアウトまたは相対レイアウトを作成することで構成されています。このソリューションには、スクロールビューがグリッドのサイズを認識しないという問題があるため、次のようにグリッドビューを拡張する必要があることを克服するために: https://stackoverflow.com/a/4536955/751180
しかし、問題は、グリッドビューがセルをリサイクルせずに一度にすべてのアイテムをレンダリングすることを強制していることです。これにより、特にビューに画像が含まれている場合、メモリの使用量が多くなり、アプリがクラッシュする可能性があります。
他の人はリストビューを使用して、画面サイズに応じて配置できる列の数を計算しています。個人的にはグリッドビューを使い続けたいと思っています。
別のアプローチを使用して gridview ヘッダーを実装した人はいますか?
android - ActionBar のスライド アップ アニメーションの実行中にビューのサイズを変更する
アクティビティ内に ImageView があり、ユーザーがそれをクリックすると、ビューの高さがフルスクリーンになるようにアニメーション化します (他のビューは画面の下に隠れるだけです)。
ただし、アニメーションが終了したら、( を使用してgetSupportActionBar().hide()
) アクションバーを非表示にします。そのため、ImageView のサイズを少し大きく変更して、再び全画面表示にする必要があります。
親ビューで、両方onMeasure
をオーバーライドonLayout
して、アクションバーが画面からスライドしている間に利用可能なサイズを取得しようとしましたが、機能しません。ビューの高さを設定すると、アクションバーアニメーションの最後に新しいサイズのみを取得します+レイアウトをリクエストすると、再度レイアウトされません(したがって、画面の下部に他のビューが表示されます)。
android - 相対レイアウトの動的サイズ変更
このようなものを作ろうとしています。
ヘッダーを機能させることができ、右側にワードクラウドのようなものがあります。Fragmentから呼び出しています。
しかし、私は2つの列を機能させるのに苦労しています。
私はこのように親の幅を取得しようとしました:
これは0を返しますが、parentLayoutにはlayout_width="match_parent"があります
このタイプの「ビュー」に関するチュートリアル/例が見つからないか、検索に使用しているキーワードが間違っている可能性があります。
どんな入力でも大歓迎です!! 前もって感謝します!!
ps onMeasure() も使用しようとしましたが、「スーパータイプメソッドをオーバーライドまたは実装する必要があります」というエラーが発生しました
android - onMeasure() のデフォルト コードはどこにありますか?
メソッドをオーバーライドonMeasure()
してカスタム測定を行うことができること、およびonMeasure()
メソッドを呼び出すとメソッドが呼び出されるview.measure()
ことを理解しています
以下のように呼び出すと、 e メソッドview.measure
をオーバーライドしなくても機能しますか? onMeasur
つまり、onMeasure
メソッドのデフォルト バージョンが存在するということですが、それはどこにありますか?
オブジェクトで測定メソッドが呼び出されたときに何が起こっているのか正確にはわかりView
ません。ドキュメントではこれについてあまり説明されていません。メソッドをオーバーライドしていない場合はonMeasure()
、既に定義されているメソッドのコードをonMeasure()
調べて、それが何をしているのかを調べる必要があります。恐ろしい部分は、測定を呼び出し、ボンネットの下で何が起こっているのかわからないことです.
見たいのですがコードがわかりません
android - View からの onMeasure がアクティビティで 0 を生成
アプリケーションが実行されます。Heightofthescreen
それがすべきことは、画面の実際の値であるテキストボックスに「=Heightofthescreen=」を表示することです。代わりに、しかし、それは私に 0 を与えるだけです。私はそれが私の文脈にあると思いますが、それを修正する方法がわかりません。
活動クラス:
ビュークラスは次のとおりです。
android - onMeasure() をオーバーライドするためだけのカスタム レイアウト
LinearLayout クラスを拡張し、次のように onMeasure() メソッドをオーバーライドするカスタム レイアウトを使用したいと考えています。
私のカスタムレイアウト:
問題は、すべての子レイアウトが表示されないことです。この作業を行うにはどうすればよいですか? ありがとう!
(下手な英語でごめんなさい)
編集:私はこのクラスを使用しましたhttps://github.com/jesperborgstrup/buzzingandroid/blob/master/src/com/buzzingandroid/ui/ViewAspectRatioMeasurer.java
android - 親が WRAP_CONTENT に設定されている場合、ViewGroup の子の高さは 0 になります。
カスタム ViewGroup を作成しています。(以下に示すように) LayoutParams を指定せずにカスタム ViewGroup をレイアウトに追加すると、正しく表示されます。
LayoutParams を指定し、幅を MATCH_PARENT に、高さを WRAP_CONTENT に設定すると (以下に示すように)、表示されません。
両方のシナリオでデバッグを実行しました。
シナリオ 1
LayoutParams を指定しない場合、子ビューは正しく測定され、メソッドがすべての子ビューを反復処理して最大の高さを決定すると、child.getMeasuredHeight()
毎回正しい値が返されます。
シナリオ 2
幅を MATCH_PARENT、高さを WRAP_CONTENT として LayoutParams を指定すると、システムは以下に説明するように onMeasure を 2 回通過します。
1
を渡します widthSpecMode = EXACTLY
width = widthSpecSize = 親 RelativeLayout の幅である 758
heightSpecMode = EXACTLY
height = heightSpecSize = 親 RelativeLayout の高さである 1055
Pass 2
widthSpecMode = EXACTLY
width = widthSpecSize = 親の幅である 758 RelativeLayout
heightSpecMode = AT_MOST
次に、メソッドはすべての子ビューを反復して最大の高さを決定しますが、child.getMeasuredHeight()
毎回 0 を返します。
子ビューは、いくつかの ImageButtons と TextView です。それらにはすべてコンテンツがあり、そのコンテンツは最初のシナリオで正しく表示されます。2 番目のシナリオで高さが 0 になるのはなぜですか? どうすれば修正できますか?
問題 を再現するための簡単なテスト アプリを作成しました。必要なすべてのコードを以下に示します。誰でも試してみたい場合は、切り取って貼り付けるだけです。
MainActivity.java
activity_main.xml
MyViewGroup.java