如何在listView中显示固定行数

时间:2013-05-24 10:41:40

标签: android android-listview

我想在ListView中仅显示5行,其余部分应为scrollable。到目前为止,我已经尝试了这个

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

    <EditText 
        android:id="@+id/txtFilename"
        android:layout_width="375dp"
        android:layout_height="wrap_content"
        android:layout_margin="10dp" />

    <ListView
        android:id="@+id/ListView01"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:scrollbarSize="2dp"
        android:

        /> 



     <LinearLayout 
        android:orientation="horizontal"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:background="@color/gray"
        android:padding="5dp" >

        <Button 
            android:id="@+id/btnOk"
            android:layout_width="0dp"
            android:layout_height="wrap_content"
            android:layout_weight="1"
            android:text="OK"/>

        <Button 
            android:id="@+id/btnCancel"
            android:layout_width="0dp"
            android:layout_height="wrap_content"
            android:layout_weight="1"
            android:text="CANCEL"/>
    </LinearLayout>  


</LinearLayout>

并在java code

public class MainActivity extends Activity {

    private ListView list1;

    private String array[] = { "Iphone", "Tutorials", "Gallery", "Android",

    "item 1", "item 2", "item3", "item 4" };
    @SuppressWarnings("unchecked")
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        // TODO Auto-generated method stub
        super.onCreate(savedInstanceState);

        //parentLayout.add(childLayout);

        setContentView(R.layout.activity_main);
        list1 = (ListView) findViewById(R.id.ListView01);

        // By using setAdpater method in listview we an add string array in

        // list.

        list1.setAdapter(new ArrayAdapter(this,android.R.layout.simple_list_item_1, array));

    }

知道如何实现它

2 个答案:

答案 0 :(得分:0)

这里我只是修改你的Layout只是检查一下!!

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

    <EditText 
        android:id="@+id/txtFilename"
        android:layout_width="375dp"
        android:layout_height="wrap_content"
        android:layout_margin="10dp" />
<LinearLayout
         android:layout_width="fill_parent"
         android:layout_height="300dip">
    <ListView
        android:id="@+id/ListView01"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:scrollbarSize="2dp"


        /> 


</LinearLayout>
     <LinearLayout 
        android:orientation="horizontal"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:background="@color/gray"
        android:padding="5dp" >

        <Button 
            android:id="@+id/btnOk"
            android:layout_width="0dp"
            android:layout_height="wrap_content"
            android:layout_weight="1"
            android:text="OK"/>

        <Button 
            android:id="@+id/btnCancel"
            android:layout_width="0dp"
            android:layout_height="wrap_content"
            android:layout_weight="1"
            android:text="CANCEL"/>
    </LinearLayout>  


</LinearLayout>

答案 1 :(得分:-1)

我为此写了Demo:

如果您想将ListView的高度修改为5个项目。那么你必须通过计算ListView高度来实际设置listItems的高度。

首先你需要为List Item创建Layout并给它一些固定的高度,这里我在Tag中添加了高度因为runtime我的布局高度为0。

这是ListItem布局

    <?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/relativeLayout"
    android:layout_width="fill_parent"
    android:background="@android:color/black"
    android:tag="40"
    android:layout_height="40dp" >

    <TextView
        android:id="@+id/text"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="XXX"
        android:textColor="@android:color/darker_gray"
        android:textSize="30sp" />

    <TextView
        android:id="@+id/text2"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginLeft="20dp"
        android:layout_toRightOf="@+id/text"
        android:text="ZZZ"
        android:textColor="@android:color/darker_gray"
        android:textSize="30sp" />

</RelativeLayout>

并设置ListView的高度:

list    =   (ListView) findViewById(R.id.listView1);

    adapter = new Adapter(MainActivity.this, setter);
    list.setAdapter(adapter);        

    RelativeLayout.LayoutParams lstViewParams = (LayoutParams) list.getLayoutParams();        
    View lisItemInflatedView = View.inflate(this, R.layout.item, null);        
    RelativeLayout relLayoutInLstItem = (RelativeLayout) lisItemInflatedView.findViewById(R.id.relativeLayout);       
    final float scale = this.getResources().getDisplayMetrics().density;
    int pixels = (int) ( Integer.parseInt( relLayoutInLstItem.getTag().toString() ) * scale + 0.5f);    
    int listHeigt = pixels  * 5 + 5;       
    lstViewParams.height = listHeigt;

这是截图..

enter image description here

希望这会有所帮助。

相关问题