0

以下のようなレイアウトになっています。これはコードによって膨らみ、Horizo​​ntalScrollViewに追加され、場合によっては数百回追加され、メモリの問題が発生します。

それをより効率的にするためにできることがあるかどうか疑問に思いますか?もともと私はLinearLayoutsを使用していましたが、それをRelativeLayoutに置き換えると、スクロールに大きな違いが生じました。今、私はそれがさらに改善できるかどうか疑問に思っていますか?

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="156dp"
    android:layout_height="254dp"
    android:paddingLeft="7dip"
    android:paddingRight="7dip">

    <FrameLayout android:id="@+id/button_frame"
    android:layout_width="156dp"
    android:layout_height="218dp">

    <ImageView android:id="@+id/button_bg"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:src="@drawable/image_bg"
        />

        <ImageView android:id="@+id/button_image"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:layout_gravity="bottom|right"
        />

        <TextView android:id="@+id/button_select"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:layout_marginLeft="2dip"
        android:layout_marginRight="2dip"
        android:background="@drawable/btn_selector_bg_selected"
        />

        <TextView android:id="@+id/button_selected"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_gravity="bottom"
        android:layout_marginLeft="2dip"
        android:layout_marginRight="2dip"
        android:background="@drawable/title_bg_selected"/>

    </FrameLayout>

    <TextView
    android:id="@+id/button_title"
    android:layout_width="156dp"
    android:layout_height="36dp"
    android:textColor="#ffffff"
    android:singleLine="true"
    android:textSize="13sp"
    android:textStyle="bold"
    android:gravity="center_vertical|left"
    android:ellipsize="end"
    android:paddingLeft="30dip"
    android:paddingRight="5dip"
    android:layout_below="@id/button_frame"
    android:background="@drawable/title_bg"/>

</RelativeLayout>

ImageView button_imageはAQuery画像キャッシュを使用して入力されるため、画像の処理方法を改善するためにできることがもっとあるかどうかはわかりません。しかし、改善に関するヒントは大歓迎です。

4

2 に答える 2

1

If you can use a ListView instead of a HorizontalScrollView, you could create an Array Adapter that uses the viewHolder pattern which essentially allows you to re-use views per item in your list view. Take a look at this for more details: http://www.jmanzano.es/blog/?p=166

于 2012-10-18T18:14:30.787 に答える
1

一般に、Android でレイアウトを最適化するための適切な方法は、相互に入れ子になっているコンテナーの量を最小限に抑えることです。レイアウト コンテナーを深くネストするほど、フレームワークがビュー階層のイベントを測定、レイアウト、および処理するために必要な作業が増えます。

しかし、あなたは間違った質問をしている可能性があると思います。

HorizontalScrollViewとは、それらを使用するためのVerticalScollViewものではありません。それらはほとんど静的なレイアウトを保持し、実行されている画面のサイズに応じて必要に応じてスクロールできるようにすることを目的としています。

ユーザーがスクロールできる、ほとんど同じビューの繰り返しリストが必要です。使用する正しい Android ビュー コンテナはListView、または の他の子孫の 1 つですAdapterView

ListView は、画面上のスペースを埋めるために必要な子ビューを作成/膨張させ、ユーザーがスクロールするときにそれらを再利用することだけに注意を払っています。これにより、発生しているメモリの問題が解決されます。Adapterこれは、表示される実際のデータをラップし、特定のデータ項目の正しいビューをオンデマンドで作成するオブジェクトとペアにする必要があることによって行われます。

水平スクロールを行おうとしているので、Gallery(現在 Android では廃止されている) または新しいViewPagerクラスを見ることもできます。どちらも、データの大きなリストでの水平移動をサポートしています。

于 2012-10-18T18:17:57.040 に答える