0

たとえば、最上位の LinearLayout ビューには 300 の子ビューがあります。ただし、デバイスの画面サイズは 11 の子ビューを 1 回しか表示しません。Androidは一度に表示できる子ビューの数をどのように計算しますか? ビューが描画されることをどのように知っていますか?

編集
済み 私の仕事では、次のような 1 つのケースがあります。親 LinearLayout ビューには、何百もの子ビューがある場合があります。パフォーマンスを向上させるために、私のソリューションは次のようになります。遅延ロードのように。

  1. List list = new ArrayList();// コンストラクト View オブジェクトを使用するエンティティ オブジェクトを含む
  2. デフォルトのロード 5 子ビュー。
  3. 親 LinearLayout ビューの最後の子ビューはカスタム Loading View です。その onDraw() メソッドをオーバーライドしました。ビューの読み込みが描画の場合、次の 5 つの子ビューを取得する必要があることを意味します (リストから次の 5 つのオブジェクトを取得し、対応するビューを作成します)。


Androidフレームワークがこのケースをどのように処理するか知りたいですか?

4

2 に答える 2

0

トップレベルのLinearLayoutビュー内でスクロールバーを使用し、そのレイアウトに子ビューを追加するのは簡単ですか...

于 2013-01-25T09:53:21.013 に答える
0

親 LinearLayout ビューには、数百の子ビューがある場合があります。パフォーマンスを向上させるために、私のソリューションは次のようになります。遅延ロードのように。

LinearLayout(可能な)数百の子ビューを使用すると、より良いパフォーマンスと矛盾します。あなたが探しているのはListView、無限のアダプターを備えたものだと思います(簡単なグーグル検索で実装方法が表示されますが、それほど難しいものではありません)。このアダプターは、最後に読み込まれた要素に到達するとすぐに、ビューの読み込みを開始します (新しいコンテンツの読み込み中に読み込み中のビューが表示されます)。

それでも使用したい場合LinearLayout

LinearLayout最初にレイアウトされたときに画面のコンテンツを塗りつぶしたいだけの場合は、メソッドRunnable内のビューの 1 つに を投稿できます (これが最初に を設定する場所である場合)。その中での高さを見つけ、それを現在存在する子の高さと比較します。組み合わせた子の高さが高さより小さい場合は、ビューを追加して補正します。onCreateLinearLayoutRunnableLinearLayoutLinearLayout

LinearLayoutが にあり、ローディング ビューが表示されたときに子を追加する場合ScrollViewは、 のスクロールを監視しScrollView、ローディング ビューが表示されたときに新しい子を追加します。ローディング ビューがいつ表示されるかを確認するには、現在存在する の子の高さを合わせたものと比較して、ユーザーがどれだけスクロールしたかを確認しますLinearLayout

初期対応:

あなたの質問は、あなたが知りたいことに関して少しあいまいです。特定の問題がある場合は、それから始めるべきです。

たとえば、最上位の LinearLayout ビューには 300 の子ビューがあります。ただし、デバイスの画面サイズは 11 の子ビューを 1 回しか表示しません。

このようなシナリオに陥らないようにしてください。ビューの数が多すぎるため、メモリが不足すると、パフォーマンスが低下したり、アプリがクラッシュしたりする可能性があります (これらのビューはすべてメモリに保持されるため)。

Androidは一度に表示できる子ビューの数をどのように計算しますか?

それぞれのViewandViewGroupには、onMeasureそれ自体とその子を測定するメソッドがあります (利用可能な場合)。LinearLayoutにはメソッドonMeasureが呼び出され、このメソッドで子を測定し (メジャーを使用method)、どのくらいの大きさにすべきかについていくつかの提案を与えます ( はLinearLayout、その親からどのくらいの大きさにすべきかについていくつかの提案を受け取ります)。これがどのように行われるかを確認したい場合は、のソース コードを参照してくださいLinearLayout

ビューが描画されることをどのように知っていますか?

あなたが知りたいことがわかりません。画面にビューを描画するために、そのonDrawメソッドが呼び出されます。

于 2013-01-25T07:35:32.437 に答える