how can i automatically size listview so it doesn't scroll

currently i have the following layout

<LinearLayout 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content"
    android:layout_alignParentLeft="true" 
    android:layout_alignParentRight="true" 

    android:layout_marginTop="9px" 
    android:layout_below="@+id/desc" 
    android:id="@+id/ll_item"  
    android:orientation="vertical" 
    android:paddingRight="3px" 
    android:paddingLeft="3px" 
    android:paddingBottom="5px" 
    android:paddingTop="5px" 
    android:background="@drawable/rounded_corner_lists" >
<!--
        <ListView android:drawSelectorOnTop="false" android:id="@+id/lv"    android:layout_height="fill_parent" android:layout_width="wrap_content" android:divider="#ddd" android:dividerHeight="1px" android:background="@drawable/white"    />
    -->
    </LinearLayout>

the listview that i have commented out, i have tried to make this in the xml, with the height set to wrap_content, fill_parent, currently i am doing this programatically with the following code

LinearLayout ll_item = (LinearLayout) this.findViewById(R.id.ll_item);
        if(list.length() > 0)
        {
            ll_item.setVisibility(View.VISIBLE);
            LinearLayout.LayoutParams lp = new LinearLayout.LayoutParams(LayoutParams.WRAP_CONTENT,calcListHeight(list));

            listview = new ListView(this);
            listview.setBackgroundResource(R.drawable.white);
            listview.setDivider( new ColorDrawable(this.getResources().getColor(R.drawable.dividercolor)) );
            listview.setDividerHeight(1);
            listview.setCacheColorHint(0);

            mAdapter  = new JSONAdapter( list, this );
            listview.setAdapter(mAdapter);
            mAdapter.notifyDataSetChanged();
            ll_item.addView(listview, lp);
        }

this is the result

alt text

alt text

so you can see in this image, that since i'm containing the listview in a linearlayout to get the rounded corner look, it doesn't just automatically stretch to contain the entire listview, is there any way to have the two elements just wrap the content vertically so there is no scrolling without me programatically setting the height ? ? ?

i guess one other thing i should mention is that i have all this layout in a scrollview, because i want this listview to be a tiny subsection of the entire layout, so it would be something like

-scrollview
-textview
-textview

-linearlayout
-listview

- button

here is a simpler layout of what i have

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout android:orientation="vertical" android:layout_height="fill_parent" android:layout_width="fill_parent"
              android:background="@drawable/bg" xmlns:android="http://schemas.android.com/apk/res/android"
              android:id="@+id/titlebar">

    <ScrollView android:id="@+id/sv" android:layout_width="fill_parent" android:background="@drawable/bg"
                android:layout_height="fill_parent" xmlns:android="http://schemas.android.com/apk/res/android">

        <RelativeLayout android:id="@+id/widget28"
                        android:layout_width="fill_parent" android:layout_height="fill_parent" android:padding="4dip"
                >


            <LinearLayout android:orientation="vertical" style="@style/rounded_corner_full_width_button"
                          android:id="@+id/editfields">

                <ListView android:drawSelectorOnTop="false" android:id="@+id/lv" android:layout_height="fill_parent"
                          android:layout_width="wrap_content" android:divider="#ddd" android:dividerHeight="1px"
                          android:background="@drawable/white"/>

            </LinearLayout>
        </RelativeLayout>
    </ScrollView>
</LinearLayout>
8
задан slim 17 August 2010 в 20:11
поделиться

1 ответ

ListView не входит в ScrollViews.

ListView предназначен для эффективного отображения ограниченного окна в неограниченное содержимое. Если вам пришлось «отключить прокрутку» в ListView, чтобы поместить его в ScrollView, вы потеряете все практические основания для использования ListView в первую очередь.

Если вы хотите использовать ListView для отображения большого количества контента или неограниченного контента, но также имеете контент выше и ниже, который прокручивается вместе с ним, добавьте представления верхнего или нижнего колонтитула в ListView с помощью addHeaderView или addFooterView . Если содержимое списка будет небольшой частью вашего общего макета, как вы описываете, это, вероятно, не лучший подход для вас.

Если у вас есть небольшой ограниченный набор контента для представления, используйте ScrollView и программно сгенерируйте дочерние представления для «элементов списка» там, где это необходимо.

Обычным шаблоном, используемым в структуре для смешивания расширенного XML-контента с программно созданным контентом, является добавление представления-заполнителя в XML-макет, обычно LinearLayout или FrameLayout . Используйте findViewById , чтобы найти его во время выполнения и добавить к нему сгенерированные дочерние представления.

Вы даже можете использовать ListAdapter с этим подходом, если он уже написан, просто вызовите content.addView (adapter.getView (position, null, content)) в цикл для всех позиций адаптера (где content - это представление-заполнитель, которое вы нашли с помощью findViewById ). Обратите внимание, что это практично только в том случае, если вы знаете, что у вас небольшое количество элементов списка в адаптере!

18
ответ дан 5 December 2019 в 09:23
поделиться
Другие вопросы по тегам:

Похожие вопросы: