34

ListView を使用して Android アプリケーションを作成しました。リストにヘッダーとフッターの両方を追加しました。ただし、区切り記号を追加すると、ヘッダーと最初の ListView 項目の間に空のスペースも作成されます。最後の ListView アイテムとフッターについても同じことが行われます。

空のスペースは、すべての ListView アイテム間の仕切りのサイズに相当しますが、仕切りが描画されず、空のスペースが残るという違いがあります。私は、xml属性「フッターの仕切りが有効」と「ヘッダーの仕切りが有効」のソリューションを見つけたと思いました。しかし、それらを false に設定しても何も変わりません。私はそれらをプログラムで設定しようとさえしました

list.setFooterDividerEnabled(false);
list.setHeaderDividerEnabled(false);

しかし、それはうまくいきません。その問題を解決する方法はありますか?空のスペースをそこに置きたくないだけです。最初の項目をヘッダーに正確に合わせたいです(フッターも同じです)。

4

6 に答える 6

5

私は同じ問題に出くわしましたが、あなたとは少し異なる状況でした。MyListViewにはヘッダー (検索ボックス) がありますが、その下の最初のアイテムには、通常のリスト アイテムではなく、セクション ヘッダー (日付または文字) が含まれています (実際のコンテンツは画像、テキスト、およびすぐ)。そのため、選択できないようにしたいので、カスタムアダプターでオーバーライドareAllItemsEnabledして return にしましたfalse

まさにそれが原因なので、大きな間違いです。設計上、ListView実装は 2 つの有効なアイテムの間の仕切りのみを描画しますが、それらの仕切りが描画されない場合でも、有効なアイテムと無効なアイテムの間の仕切り用のスペースを予約しているようです。もちろん、これが意識的な設計上の決定であるという事実は、それがばかげていないという意味ではありません。最も奇妙なことに、このディバイダーの描画ポリシーは、後続のアイテムの のareAllItemsEnabled単一呼び出しによって返される値ではなく、によって返される値のみに基づいています。isEnabled

したがって、それを回避するには、元に戻る必要がありましたtrueareAllItemsEnabledオーバーライドされたメソッドを保持し、この問題についてコメントを追加しました。そうしないと、今から1か月後にそれを思い出すことができなくなります):見よ、空白が消えた、仕切りに交換。ここで、ヘッダーと最初のセクション ヘッダーを正確に隣接させたい場合はListView、セクション ヘッダーの色と同じ仕切りの色を選択するだけです。

それがあなたの場合と同じ場合、または私の解決策が他の方法で役立つことを本当に願っています.

于 2013-07-10T10:07:12.360 に答える
1

機能する幻影浪子によるソリューションを試しました(android-pullrefresh に基づく):

ビューのレイアウト (header.xml):

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content" >

    <RelativeLayout
        android:id="@+id/content"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content" >

        <ProgressBar
            style="@android:style/Widget.ProgressBar.Small.Inverse"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_centerInParent="true"
            android:layout_margin="16dp"
            android:layout_marginTop="2dp" />
    </RelativeLayout>
</LinearLayout>

インフレータブル ビュー:

m_headerView = inflater.inflate(R.layout.header, this, false);

表示ビュー:

m_headerView.setPadding(0, 0, 0, 0);
m_headerView.setVisibility(View.VISIBLE);

ビューを非表示:

m_headerView.setPadding(0, -1000, 0, 0);
m_headerView.setVisibility(View.GONE);

私たちのプロジェクトでは完璧に機能しました。お役に立てば幸いです。

于 2013-01-25T07:04:47.843 に答える
-3

やるだけ

list.setDividerHeight(0)

それはそれの世話をする必要があります。

于 2012-07-27T22:19:03.393 に答える