欢迎来到鸿蒙5.0开发实战系列!本篇是系列的开篇,我们将以“黑马云音乐”App中的“猜你喜欢”模块为切入点,手把手教你如何实现一个横向滚动的列表布局。无论你是刚接触鸿蒙开发的新手,还是有一定经验想快速上手的开发者,本文都将为你提供清晰、详尽的步骤。准备好了吗?让我们一起开启鸿蒙开发之旅!
“黑马云音乐”是一个仿照主流音乐App的练手项目,旨在通过实战帮助开发者快速掌握鸿蒙5.0开发的核心技术。本节我们将实现首页的“猜你喜欢”模块——一个横向滚动的卡片列表,展示推荐歌曲的封面、歌名和歌手。通过这个实战,你将学习到:
首先,请确保你已经安装了DevEco Studio(推荐最新版,支持鸿蒙5.0开发)。打开IDE后,按照以下步骤创建项目:
项目创建后,你会看到类似如下的目录结构:entry模块是主模块,所有的代码和资源都存放在这里。
在鸿蒙5.0中,布局文件通常使用XML编写,存放在entry/src/main/resources/base/layout目录下。我们首先创建主界面的布局文件ability_main.xml,在其中放置一个横向列表容器。
上述代码中,我们创建了一个垂直方向的DirectionalLayout作为根布局,顶部是一个标题“猜你喜欢”,下方是一个ListContainer组件,并设置orientation="horizontal"使其横向滚动。注意,我们为ListContainer指定了id,以便在代码中引用。
每个列表项代表一首歌,我们设计一个简单的卡片布局:上方是歌曲封面图,下方是歌名和歌手。在layout目录下新建item_song.xml:
这里我们设置了每个卡片的宽度为130vp,内部包含一个Image和两个Text,所有内容居中显示。这便是一个标准的猜你喜欢列表项样式。
在Java代码中,我们需要定义歌曲的数据结构,并编写适配器来填充ListContainer。首先,创建一个数据类Song.java:
public class Song { private String name; private String artist; private int imageResId; // 图片资源ID public Song(String name, String artist, int imageResId) { this.name = name; this.artist = artist; this.imageResId = imageResId; } // 省略getter/setter方法} 然后,创建适配器GuessAdapter.java继承RecycleItemProvider:
public class GuessAdapter extends RecycleItemProvider { private List list; private Context context; public GuessAdapter(List list, Context context) { this.list = list; this.context = context; } @Override public int getCount() { return list.size(); } @Override public Object getItem(int position) { return list.get(position); } @Override public long getItemId(int position) { return position; } @Override public Component getComponent(int position, Component convertComponent, ComponentContainer parent) { Component cpt; if (convertComponent == null) { cpt = LayoutScatter.getInstance(context).parse(ResourceTable.Layout_item_song, null, false); } else { cpt = convertComponent; } Song song = list.get(position); Image image = (Image) cpt.findComponentById(ResourceTable.Id_song_image); Text name = (Text) cpt.findComponentById(ResourceTable.Id_song_name); Text artist = (Text) cpt.findComponentById(ResourceTable.Id_song_artist); image.setPixelMap(song.getImageResId()); name.setText(song.getName()); artist.setText(song.getArtist()); return cpt; }} 在getComponent方法中,我们解析列表项布局,并填充数据。这是布局实现的核心逻辑。
打开MainAbilitySlice.java,在onStart方法中加载布局并设置适配器:
public class MainAbilitySlice extends AbilitySlice { @Override public void onStart(Intent intent) { super.onStart(intent); super.setUIContent(ResourceTable.Layout_ability_main); ListContainer listContainer = (ListContainer) findComponentById(ResourceTable.Id_guess_list); List data = new ArrayList<>(); data.add(new Song("梦想天空", "李华", ResourceTable.Media_icon1)); data.add(new Song("平凡之路", "朴树", ResourceTable.Media_icon2)); data.add(new Song("夜曲", "周杰伦", ResourceTable.Media_icon3)); // 添加更多数据... GuessAdapter adapter = new GuessAdapter(data, this); listContainer.setItemProvider(adapter); }} 注意:图片资源需要提前放入entry/src/main/resources/base/media目录下,并在resource.table中生成对应的ID。
点击运行按钮,选择模拟器或真机。如果一切顺利,你应该能看到一个横向滚动的卡片列表,就像下面这张示意图:
如果列表没有出现,请检查以下几点:
至此,我们已经完成了黑马云音乐项目中“猜你喜欢”列表的布局实现。通过这个实战,你掌握了鸿蒙中列表组件ListContainer的基本用法、自定义适配器的编写以及布局文件的组织。在下一期中,我们将继续完善这个模块,加入点击事件和网络数据加载,敬请期待!
鸿蒙5.0开发实战系列持续更新中,欢迎关注!
本文由主机测评网于2026-03-12发表在主机测评网_免费VPS_免费云服务器_免费独立服务器,如有疑问,请联系我们。
本文链接:http://www.vpshk.cn/20260330640.html