【发布时间】:2013-09-13 19:36:51
【问题描述】:
我想知道如何制作一个ListView,每行有 5 个项目,水平滚动,垂直滚动
【问题讨论】:
-
取一个 5 列的 GridView 而不是 Listview。
标签: android android-listview vertical-scrolling
我想知道如何制作一个ListView,每行有 5 个项目,水平滚动,垂直滚动
【问题讨论】:
标签: android android-listview vertical-scrolling
您需要创建一个自定义行,然后有 60 行。
假设你有一个
ArrayList<String> cars
汽车数据。
@Override
public View getView(int position, View convertView, ViewGroup parent)
{
//Determine the first car
int firstCarPosition = position*5;
CarListItem item = new CarListItem(context);
item.fillItem(firstCarPosition);
return item;
}
然后创建一个像这样的类
public class CarListItem extends LinearLayout {
public SingleRowListItem(Context context) {
super(context);
LayoutInflater inflater = (LayoutInflater)getContext().getSystemService(Context.LAYOUT_INFLATER_SERVICE);
inflater.inflate(R.layout.list_item_cars_row, this, true);
}
public void fillItem(int firstPosition)
{
TextView car1 = (TextView)findViewById(R.id.car1);
TextView car2 = (TextView)findViewById(R.id.car2);
TextView car3 = (TextView)findViewById(R.id.car3);
TextView car4 = (TextView)findViewById(R.id.car4);
TextView car5 = (TextView)findViewById(R.id.car5);
car1.setText(cars.get(firstPosition);
car2.setText(cars.get(firstPosition+1);
car3.setText(cars.get(firstPosition+2);
car4.setText(cars.get(firstPosition+3);
car5.setText(cars.get(firstPosition+4);
}
}
最后,创建一个名为 list_item_car_row 的 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="60dp"
android:background="@drawable/standard_background"
android:orientation="horizontal"
>
<TextView
android:id="@+id/car1"
android:layout_height="wrap_content"
android:layout_weight="wrap_content"/>
<TextView
android:id="@+id/car2"
android:layout_height="wrap_content"
android:layout_weight="wrap_content"/>
<TextView
android:id="@+id/car3"
android:layout_height="wrap_content"
android:layout_weight="wrap_content"/>
<TextView
android:id="@+id/car4"
android:layout_height="wrap_content"
android:layout_weight="wrap_content"/>
<TextView
android:id="@+id/car5"
android:layout_height="wrap_content"
android:layout_weight="wrap_content"/>
</LinearLayout>
这就是所谓的组件,不是系统默认项。该组件基于 6 个文本视图。编辑 XML,添加更多数据并制作一个很酷的 :)
【讨论】:
据我所知,您想制作一个普通的 ListView 垂直滚动,但在每一行中您也希望水平滚动。
用你喜欢的任何适配器制作普通的ListView,但设计项目布局如下:
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="horizontal"
android:layout_width="fill_parent"
android:layout_height="wrap_content">
<HorizontalScrollView
android:id="@+id/hor_scroll"
android:layout_width="wrap_content"
android:layout_height="wrap_content">
<LinearLayout
android:id="@+id/lin"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="horizontal">
<ImageView
android:id="@+id/icon"
android:layout_width="wrap_content"
android:layout_height="fill_parent"
android:layout_marginRight="6.0dip"
android:layout_alignParentTop="true"
android:layout_alignParentBottom="true"
android:focusable="false" />
<TextView
android:textAppearance="?android:textAppearanceMedium"
android:gravity="center_vertical"
android:id="@+id/text"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:singleLine="true"
android:layout_toRightOf="@id/icon"
android:layout_alignParentTop="true"
android:layout_alignParentBottom="true" />
</LinearLayout>
</HorizontalScrollView>
</RelativeLayout>
您将拥有 Vertically Scrollable ListView 和水平滚动标签项。
【讨论】:
您必须使用自定义 ListAdapter 创建一个垂直 ListView,每行包含 5 个项目。您可以在 XML 布局文件中描述行的布局。例如见http://www.survivingwithandroid.com/2012/10/android-listview-custom-adapter-and.html。
【讨论】:
你需要创建一个带有 Listview 的布局文件
<ListView
android:id="@+id/list"
android:layout_width="match_parent"
android:layout_height="match_parent" />
然后在代码中,您需要一个 ArrayAdapter(我总是创建自己的!)来填充您的列表和每个项目的 item_layout
arrayAdapter = new ArrayAdapter(getActivity().getApplicationContext(), R.layout.item_layout, someArrayList);
ListView lv = (ListView) view.findViewById(R.id.list);
lv.setAdapter(arrayAdapter );
【讨论】: