13

ListView の背後にある画面全体を埋めるカスタム イメージの背景があります。

ListView には、いくつかのデータを含むヘッダーがあり、次に透明な 10 dp マージン (背景画像を少しだけ見ることができます)、さらにいくつかのデータが含まれます。このヘッダーの下、ListView の「本体」で、ListView の背景を画面の一番下まで塗りつぶす必要があります。

ListView の背景を設定すると、項目が 2 つしかない (またはまったくない) 場合でも、常に画面の下部まで塗りつぶすという目的の効果が得られます。しかし、これはヘッダーの 10 dp の透明な仕切りも覆ってしまうため、ヘッダーからカスタム背景を「透けて」見ることができなくなります。

ヘッダー内の透明な仕切りを維持しながら、画面の塗りつぶしの両方を取得するための正しい道を教えてください。

ヘッダーの透明な仕切りに影響を与えることなく、ListView の背景の錯覚を作成するために使用できる「偽の」項目セルを作成する必要があるかもしれないと誰かが言いました。ただし、可能であればより簡単な解決策を見つけたいと思っています..またはそれ最善の解決策である場合は、最も効率的な方法でそれを達成する方法について誰かが私にいくつかの指針を与えることができるかどうかを確認してください.

ありがとうございました!

編集:

ヘッダーを定義する方法は次のとおりですが、この質問は、addHeaderView() を介して ListView に追加しているこのヘッダーよりも ListView に関係していると思います。

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent" android:layout_height="wrap_content"
android:background="@android:color/transparent" android:orientation="vertical">

    <include android:id="@+view_list_header/headertop"
        layout="@layout/view_list_item"/>

    **<LinearLayout android:id="@+view_list_header/ll_transparent_filler"
    android:layout_width="fill_parent" android:layout_height="10dp"/>**     

    <RelativeLayout android:id="@+view_list_header/sort" android:layout_width="fill_parent" android:layout_height="wrap_content">
        <TextView.../> <ImageView.../> <TextView.../>
    </RelativeLayout>
</RelativeLayout>

したがって、10dpフィラーを作成するさまざまな方法を試しました。現在、「空の」10dp LinearLayoutを使用しているため、参照を取得し、必要に応じて可視性をGONEに設定できます(これは行っていません)私が議論している場合)

ListView の背景を次のように設定しています: listView.setBackgroundResource(resource)。

繰り返しますが、この ListView に背景を設定すると、リストに追加したアイテムの数が多い場合でも、常に画面全体を埋める背景の望ましい動作が得られます (ちなみに、すべてが私と同じ背景リソースを使用します)。 ListView への設定) では、画面いっぱいに表示するには不十分です。しかし、これを行うと、ヘッダーの 10 dp の「透明なマージン」は表示されません。これは、その背後にある ListViews の背景によって、基になるビューが表示されないためです。

ListView の背景もヘッダー ビューとフッター ビューの背後にあるため、これが発生すると想定しています。

ポイントは、要素間に 10 dp の「透明な余白」を作成して、下にあるビューが透けて見えるようにする方法がたくさんあるということです。私の問題は、リストが部分的に埋められているか空の場合でも、常に画面を埋め尽くすListView の「ボディ」 (つまり、ヘッダー/フッターではない)の背景を作成し、同時にヘッダーの透明度を維持することにあります。 ListView の「背後」にあるビューを引き続き表示できます。

4

3 に答える 3

0

ListViewで次のように設定して、アイテムを透明にする必要がありますListView

android:background="@android:color/transparent"
android:cacheColorHint="@android:color/transparent"

次に、アイテムのレイアウトに任意の色/画像が必要です (これは透明度の上に配置されます)。

ListViewこれは機能するはずですが、Android では特に多くの UI 更新がある場合に透明性が実際に犠牲になるため、Android では大変な作業になります。

于 2013-07-11T04:40:33.127 に答える
0

色付きのフッターを追加してハッキングしました。フッターは、目的の背景色で 5 dp の高さに設定された「塗りつぶし」と呼ばれるビューを含む LinearLayout でした。

リスト ヘッダー (前のコード) を入力してスケーリングした後、残りの画面スペースを埋めるようにフッターを調整しました。

        ...

    int totHeight = getTotalHeightofListView();

    if((mHeader.getMeasuredHeight() + totHeight) < mList.getMeasuredHeight())
        addFooterFill(mHeader.getMeasuredHeight() + totHeight);
}

protected int getTotalHeightofListView() {

    ListAdapter LvAdapter = mList.getAdapter();
    int totHeight = 0;
    for (int i = 0; i < mAdapter.getCount(); i++) {
        View mView = mAdapter.getView(i, null, mList);
        mView.measure(
                MeasureSpec.makeMeasureSpec(0, MeasureSpec.UNSPECIFIED),
                MeasureSpec.makeMeasureSpec(0, MeasureSpec.UNSPECIFIED));
        totHeight += mView.getMeasuredHeight();
    }

    return totHeight; 
}

protected void addFooterFill(int sizeUsed){

    View fill = (View) mFooter.findViewById(R.id.fill);

    LinearLayout.LayoutParams params = (LinearLayout.LayoutParams) fill.getLayoutParams();
    params.height = mList.getMeasuredHeight() - sizeUsed;
    fill.setLayoutParams(params);
}

理論的には、これは既にフッターがある場合でも機能するはずです。基本的には、フッター内のビューの高さを調整しているだけです。

于 2013-08-27T07:42:32.647 に答える