You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Android Studio中实现ListView横向滚动?

实现ListView横向滚动(Item水平排列)的两种方案

ListView默认是垂直排列Item,若要实现Item水平排列、左右横向滚动的效果,有两种可行方案,其中RecyclerView方案性能更优,是官方推荐的做法:


方案一:改造现有ListView实现横向滚动

通过HorizontalScrollView包裹ListView,配合布局参数调整实现需求:

  1. 修改XML布局文件
    将ListView嵌套进HorizontalScrollView,调整宽高属性让列表可横向展开:
<HorizontalScrollView
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:scrollbars="none">

    <ListView
        android:id="@+id/filter_list"
        android:layout_width="wrap_content"
        android:layout_height="?android:attr/listPreferredItemHeight"
        android:scrollbars="none"
        app:layout_constraintBottom_toTopOf="@id/img_album"
        app:layout_constraintTop_toTopOf="parent"
        android:layout_marginTop="40dp"
        android:layout_marginBottom="20dp" />
</HorizontalScrollView>

注:将ListView的layout_height固定为单个Item的高度,layout_width设为wrap_content,使其根据Item总宽度自适应。

  1. 修改Item布局(R.layout.row_white_text)
    调整TextView的宽高和对齐方式,适配横向排列:
<TextView xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/label"
    style="@style/ServiceTextShadow"
    android:layout_width="120dp"
    android:layout_height="match_parent"
    android:gravity="center"
    android:padding="12dp"
    android:textAppearance="?android:attr/textAppearanceListItem"
    android:textColor="@android:color/white"
    android:textSize="12sp"
    android:textStyle="bold"/>
  1. 适配Adapter逻辑
    确保Adapter中每个Item的宽度固定,避免布局错乱。

方案二:改用RecyclerView实现横向滚动(推荐)

RecyclerView天生支持灵活布局方向,且具备Item复用机制,性能远优于改造后的ListView:

  1. 修改XML布局,替换ListView为RecyclerView
<androidx.recyclerview.widget.RecyclerView
    android:id="@+id/filter_recycler"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    app:layout_constraintBottom_toTopOf="@id/img_album"
    app:layout_constraintTop_toTopOf="parent"
    android:layout_marginTop="40dp"
    android:layout_marginBottom="20dp" />
  1. 在Java代码中设置横向布局管理器
final List<FilterType> filterTypes = FilterType.createFilterList();
// 初始化横向布局管理器
LinearLayoutManager layoutManager = new LinearLayoutManager(this, LinearLayoutManager.HORIZONTAL, false);
filter_recycler.setLayoutManager(layoutManager);
// 设置适配RecyclerView的Adapter
filter_recycler.setAdapter(new FilterRecyclerAdapter(this, filterTypes));
  1. 编写RecyclerView的Adapter
public class FilterRecyclerAdapter extends RecyclerView.Adapter<FilterRecyclerAdapter.ViewHolder> {
    private Context mContext;
    private List<FilterType> mFilterTypes;

    public FilterRecyclerAdapter(Context context, List<FilterType> filterTypes) {
        mContext = context;
        mFilterTypes = filterTypes;
    }

    @NonNull
    @Override
    public ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
        View view = LayoutInflater.from(mContext).inflate(R.layout.row_white_text, parent, false);
        return new ViewHolder(view);
    }

    @Override
    public void onBindViewHolder(@NonNull ViewHolder holder, int position) {
        FilterType filterType = mFilterTypes.get(position);
        holder.label.setText(filterType.getName()); // 根据你的数据模型调整字段
    }

    @Override
    public int getItemCount() {
        return mFilterTypes.size();
    }

    public static class ViewHolder extends RecyclerView.ViewHolder {
        TextView label;

        public ViewHolder(@NonNull View itemView) {
            super(itemView);
            label = itemView.findViewById(R.id.label);
        }
    }
}
  1. 原Item布局(R.layout.row_white_text)无需修改,可直接复用。

注意事项

  • 方案一中的ListView横向滚动存在性能短板,大量数据时Item复用机制失效,易出现卡顿。
  • 方案二的RecyclerView是官方推荐的列表组件,性能稳定、扩展性强,优先选择此方案。

内容的提问来源于stack exchange,提问作者Rakesh Saini

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.19 06:30:50