70

次のようなレイアウトを作成しようとしています。

ListViews問題は、スクロール可能にしたくないことです。必要なだけ高くして、画面全体をスクロール可能にしたい. の高さを に設定するListViewと、うまくいきwrap_contentません。それを機能させる唯一の方法は、特定の高さを設定することですが、ListView.

ListView内部に入れるべきではないことはわかっていScrollViewListViewますが、すべてのアイテムを表示するためだけにスクロール可能にしたくありません。

多分それを機能させるためのより良い方法がありますか?

4

7 に答える 7

157

スクロール不可のカスタム ListView を作成します

public class NonScrollListView extends ListView {

    public NonScrollListView(Context context) {
        super(context);
    }
    public NonScrollListView(Context context, AttributeSet attrs) {
        super(context, attrs);
    }
    public NonScrollListView(Context context, AttributeSet attrs, int defStyle) {
        super(context, attrs, defStyle);
    }
    @Override
    public void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
            int heightMeasureSpec_custom = MeasureSpec.makeMeasureSpec(
                    Integer.MAX_VALUE >> 2, MeasureSpec.AT_MOST);
            super.onMeasure(widthMeasureSpec, heightMeasureSpec_custom);
            ViewGroup.LayoutParams params = getLayoutParams();
            params.height = getMeasuredHeight();    
    }
}

レイアウト リソース ファイル内

<?xml version="1.0" encoding="utf-8"?>
<ScrollView xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:fadingEdgeLength="0dp"
    android:fillViewport="true"
    android:overScrollMode="never"
    android:scrollbars="none" >

    <RelativeLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content" >

        <!-- com.Example Changed with your Package name -->

        <com.Example.NonScrollListView
            android:id="@+id/lv_nonscroll_list"
            android:layout_width="match_parent"
            android:layout_height="wrap_content" >
        </com.Example.NonScrollListView>

        <RelativeLayout
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_below="@+id/lv_nonscroll_list" >

            <!-- Your another layout in scroll view -->

        </RelativeLayout>
    </RelativeLayout>

</ScrollView>

Java ファイル内

次のような ListView の代わりに customListview のオブジェクトを作成します

于 2014-07-08T10:21:45.827 に答える
10

a を使用する必要はまったくありませんlistview

あなたが本当にそれについて考えるなら、あなたのケースlistviewでは a を a に置き換えることができLinearLayoutます。はAdapter同じですが、アダプターを にアタッチする代わりに、データの for ループでアダプターlistviewの関数を呼び出し、getView取得したビューを垂直 に追加しますlinearlayout

ただし、このアプローチは、リスト内の項目数が少なく、それらの項目の表示表現がメモリをあまり消費しない場合にのみお勧めします。

于 2013-09-15T15:14:41.923 に答える
0

さて、Mark Murphy aka CommonsWare という名前のクールな Android の男がいて、必要なことを実行できるようにするCWAC Merge Adapterという非常に便利なコンポーネントを作成しました。XML からではなく、ビューを動的に追加する必要があります。しかし、シンプルな UI を考えると、それは問題にはなりません。スクロールするデータの種類がわからないときに、このような場合に使用しています。

使用したくない場合 (おそらくライセンス上の理由から)、(2 つの連続したリストビューの代わりに) そこに 1 つのリストビューを作成し、オーバーライドしてgetItemViewsCount、上記のレイアウトを提供することができます。Google で検索すると、有益な情報が見つかります。たとえば、このリンク、またはこれです。getItemViewTypegetViewandroid listview different rows

ただし、マージアダプターを使用します。

于 2013-09-15T14:22:36.200 に答える
0

アイテムの高さ/幅を計算できる場合は、簡単な解決策があります... ListView の親 Linearlayout を作成し、Java から親の高さを固定するだけです。

ここに画像の説明を入力

このビューを設計する必要があるとします... 現在、親レイアウトのサイズは Java から定義されています...

final LinearLayout parent=(LinearLayout)findViewById(R.id.parent);
final ListView  listview=(ListView)findViewById(R.id.listview);
parent.setLayoutParams(new LinearLayout.LayoutParams(parent.getLayoutParams().width, dpToPx( number_of_item_in_list * per_item_size_in_dp )));
//number_of_item_in_list is list side ~ listArray.size();
//per_item_size_in_dp = calculate item size in dp. Ex: 80dp

public static int dpToPx(int dp)
{
    return (int) (dp * Resources.getSystem().getDisplayMetrics().density);
}

それで全部です :)

于 2016-03-20T11:49:14.023 に答える