web-dev-qa-db-ja.com

リストビューヘッダーと最初のアイテムの間の空のスペース

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

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

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

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

34
Niles11

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

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

したがって、これを回避するには、trueからareAllItemsEnabledを返す必要がありました(オーバーライドされたメソッドを保持し、この問題に関するコメントを追加しました。そうしないと、1か月間思い出せません。今から):見よ、空白が消え、仕切りに置き換えられた。ここで、ListViewヘッダーと最初のセクションヘッダーを完全に隣接しているものとして表示する場合は、セクションヘッダーの色と同じ仕切りの色を選択する必要があります。

それがあなたの場合と同じであるか、私の解決策が他の方法であなたを助けることを本当に願っています。

5

私は solution by幻影浪子が動作することを試しました( Android-pulltorefresh に基づく):

ビューレイアウト(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);

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

1
lucian

AndroidレイアウトのListViewプロパティに移動し、間隔タグを検索します... Androidでは、新しいレイアウトを作成するときに、デフォルトで間隔ヘッダーの間隔と境界線のプロパティが作成されます。確認してください。それが利用可能であり、それを削除します

0
nanithehaddock

Getviewメソッドでは、アイテムが最初か最後かを確認し、高さ0または透明色の1ピクセルの高さになるカスタムデバイスを設定できます。

0
Pramod

素晴らしい解決策が見つかりませんでした。

セットする dividerHeight="0dp"そして、手動で独自の仕切りを作成しました-レイアウトXMLで直接、またはより正確な制御が必要な場合はアダプターで動的に。

0
craigrs84