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

新手求教:在Xamarin Android中如何实现轮播视图?

Xamarin Android 实现水平滚动列表的实用方案

方法一:RecyclerView(推荐,适配大数据量)

RecyclerView是Android官方主推的列表控件,天生支持水平布局,性能和扩展性都很强。

1. 先加依赖

在项目的NuGet管理器里搜索并安装Xamarin.AndroidX.RecyclerView包。

2. 布局里加RecyclerView

在你的页面布局XML中添加:

<androidx.recyclerview.widget.RecyclerView
    android:id="@+id/horizontalRecyclerView"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"/>

3. 写Adapter和ViewHolder

创建适配器类来绑定数据和视图:

public class HorizontalListAdapter : RecyclerView.Adapter
{
    private List<string> _dataList;

    public HorizontalListAdapter(List<string> data)
    {
        _dataList = data;
    }

    // 创建子项视图
    public override RecyclerView.ViewHolder OnCreateViewHolder(ViewGroup parent, int viewType)
    {
        View itemView = LayoutInflater.From(parent.Context)
            .Inflate(Resource.Layout.horizontal_item, parent, false);
        return new ItemViewHolder(itemView);
    }

    // 绑定数据到视图
    public override void OnBindViewHolder(RecyclerView.ViewHolder holder, int position)
    {
        var viewHolder = holder as ItemViewHolder;
        viewHolder.ItemLabel.Text = _dataList[position];
    }

    public override int ItemCount => _dataList.Count;

    // ViewHolder类,缓存子项控件
    public class ItemViewHolder : RecyclerView.ViewHolder
    {
        public TextView ItemLabel { get; set; }

        public ItemViewHolder(View itemView) : base(itemView)
        {
            ItemLabel = itemView.FindViewById<TextView>(Resource.Id.itemLabel);
        }
    }
}

对应的子项布局horizontal_item.xml:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="160dp"
    android:layout_height="110dp"
    android:gravity="center"
    android:layout_margin="8dp"
    android:background="#f5f5f5">

    <TextView
        android:id="@+id/itemLabel"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:textSize="17sp"/>
</LinearLayout>

4. 在Activity里配置

protected override void OnCreate(Bundle savedInstanceState)
{
    base.OnCreate(savedInstanceState);
    SetContentView(Resource.Layout.main_activity);

    var recyclerView = FindViewById<RecyclerView>(Resource.Id.horizontalRecyclerView);
    // 设置水平方向的布局管理器
    recyclerView.SetLayoutManager(new LinearLayoutManager(this, LinearLayoutManager.Horizontal, false));

    // 准备测试数据
    var testData = new List<string> { "选项1", "选项2", "选项3", "选项4", "选项5", "选项6" };
    recyclerView.SetAdapter(new HorizontalListAdapter(testData));
}

方法二:HorizontalScrollView + LinearLayout(适合小数据量)

如果只是简单展示少量内容,用这个组合更省事,不用写适配器。

布局代码

<HorizontalScrollView
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:scrollbars="none">

    <LinearLayout
        android:id="@+id/horizontalContainer"
        android:layout_width="wrap_content"
        android:layout_height="110dp"
        android:orientation="horizontal"/>
</LinearLayout>

代码里动态加子项

protected override void OnCreate(Bundle savedInstanceState)
{
    base.OnCreate(savedInstanceState);
    SetContentView(Resource.Layout.main_activity);

    var container = FindViewById<LinearLayout>(Resource.Id.horizontalContainer);
    var itemTexts = new List<string> { "条目A", "条目B", "条目C", "条目D" };

    foreach (var text in itemTexts)
    {
        TextView itemView = new TextView(this);
        itemView.Text = text;
        itemView.SetPadding(16, 16, 16, 16);
        itemView.LayoutParameters = new LinearLayout.LayoutParams(
            LinearLayout.LayoutParams.WrapContent, 
            LinearLayout.LayoutParams.MatchParent);
        itemView.Gravity = GravityFlags.Center;
        itemView.SetBackgroundColor(Color.LightGray);
        
        // 设置间距
        var marginParams = new LinearLayout.LayoutParams(itemView.LayoutParameters);
        marginParams.SetMargins(8, 8, 8, 8);
        itemView.LayoutParameters = marginParams;

        container.AddView(itemView);
    }
}

两种方法对比

  • RecyclerView:支持视图复用,数据再多也不卡,还能加动画、分割线,适合复杂场景。
  • HorizontalScrollView组合:代码少,实现快,但没有视图复用,数据多了会卡顿,适合简单需求。

内容的提问来源于stack exchange,提问作者kajal pokale

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.11 21:10:37