问题
I want to display only 5 rows in a ListView and rest of them should be scrollable.So far i have tried this
<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>
and in 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));
}
have any idea how to achieve it
回答1:
Here i am Just Modifying Your Layout just check it out!!
<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>
回答2:
I have written Demo for this Like:
if you want to fix Height of ListView to 5 items. then you have to set Height of ListView pragmatically by calculating listItems height.
First you need to create Layout for List Item and give it some fixed height, here i'm added height in Tag cause runtime i was getting layouts height as 0.
This is ListItem Layout
<?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>
and to set Height of 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;
here's the screenshot..
Hope this will Help.
来源:https://stackoverflow.com/questions/16733129/how-to-show-fixed-number-of-rows-in-a-listview