代码拉取完成,页面将自动刷新
在鸿蒙系统上自定义流式布局
效果图里面的内容是从服务器获取的,我们使用蒹葭网络库来请求服务器,
蒹葭是鸿蒙系统上一款网络请求框架,本质上是从retrofit
移植过来的,
蒹葭的用法跟retrofit
是一样,如果不熟悉蒹葭的用法,
可以阅读鸿蒙系统网络请求框架—蒹葭 这篇文章。
在示例代码中,我们会访问搜索热词
这个接口,这个接口用于获取搜索热词。
3、1 在配置文件中添加访问网络的权限
"ohos.permission.INTERNET"
3、2 打开entry目录下的build.gradle文件中,在build.gradle文件中的dependencies闭包下添加下面的依赖。
// 蒹葭的核心代码
implementation 'io.gitee.zhongte:jianjia:1.0.1'
// 数据转换器,数据转换器使用gson来帮我们解析json,不需要我们手动解析json
implementation 'io.gitee.zhongte:converter-gson:1.0.1'
implementation "com.google.code.gson:gson:2.8.2"
3、3 在布局文件添加流式布局
<?xml version="1.0" encoding="utf-8"?>
<DirectionalLayout
xmlns:ohos="http://schemas.huawei.com/res/ohos"
ohos:height="match_parent"
ohos:width="match_parent"
ohos:orientation="vertical">
<com.pyf.flowlayout.FlowLayout
ohos:id="$+id:flow_layout"
ohos:height="match_content"
ohos:width="match_parent"/>
</DirectionalLayout>
3、4 在布局文件中创建流式布局的子组件
<?xml version="1.0" encoding="utf-8"?>
<Text
xmlns:ohos="http://schemas.huawei.com/res/ohos"
ohos:background_element="$graphic:background_ability_main"
ohos:height="match_content"
ohos:margin="10vp"
ohos:padding="10vp"
ohos:text_alignment="center"
ohos:text_color="#ffffff"
ohos:text_size="15fp"
ohos:width="match_content">
</Text>
3、5 创建接口
/**
* @author 裴云飞
* @date 2021/5/16
*/
public interface Wan {
@GET("/hotkey/json")
Call<HotKey> getHotKey();
}
3、6 在AbilityPackage
中创建蒹葭对象,并创建接口的实例对象
public class MyApplication extends AbilityPackage {
private static MyApplication application;
private JianJia mJianJia;
private Wan mWan;
public static MyApplication getInstance() {
return application;
}
@Override
public void onInitialize() {
super.onInitialize();
application = this;
// 创建蒹葭对象
mJianJia = new JianJia.Builder()
.baseUrl("https://www.wanandroid.com/")
.addConverterFactory(GsonConverterFactory.create())
.build();
// 创建接口的实例对象
mWan = mJianJia.create(Wan.class);
}
/**
* 获取蒹葭对象
*
* @return 蒹葭对象
*/
public JianJia getJianJia() {
return mJianJia;
}
/**
* 获取接口的实例对象
*
* @return
*/
public Wan getWan() {
return mWan;
}
}
3、7 在MainAbilitySlice
里面使用蒹葭访问服务器,将搜索热词显示到流式布局里面
public class MainAbilitySlice extends AbilitySlice {
private FlowLayout mFlowLayout;
@Override
public void onStart(Intent intent) {
super.onStart(intent);
super.setUIContent(ResourceTable.Layout_ability_main);
mFlowLayout = (FlowLayout) findComponentById(ResourceTable.Id_flow_layout);
// 请求服务端的搜索热词
MyApplication.getInstance().getWan().getHotKey().enqueue(new Callback<HotKey>() {
@Override
public void onResponse(Call<HotKey> call, Response<HotKey> response) {
// 请求成功
if (response.isSuccessful()) {
HotKey hotKey = response.body();
// 设置搜索热词
setHotKey(hotKey);
}
}
@Override
public void onFailure(Call<HotKey> call, Throwable throwable) {
// 请求失败
LogUtils.info("yunfei", throwable.getMessage());
}
});
}
/**
* 设置搜索热词
*
* @param hotKey
*/
private void setHotKey(HotKey hotKey) {
if (hotKey == null || hotKey.data == null || hotKey.data.isEmpty()) {
// 判空操作
return;
}
List<Data> hotKeys = hotKey.data;
for (Data data : hotKeys) {
// 将布局文件转换成组件对象,并强转为Text组件
Text text = (Text) LayoutScatter.getInstance(this).
parse(ResourceTable.Layout_item_text, null, false);
if (data != null && !TextUtils.isEmpty(data.name)) {
// 显示组件的内容
text.setText(data.name);
// 将组件添加到流式布局
mFlowLayout.addComponent(text);
}
}
}
@Override
public void onActive() {
super.onActive();
}
@Override
public void onForeground(Intent intent) {
super.onForeground(intent);
}
}
更多代码讲解,请查看博客 , 博客以自定义流式布局为例,非常详细的介绍了 自定义布局的各方面知识,非常适合鸿蒙的初学者。
感谢玩Android 提供的开放接口
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。
代码活跃度
社区活跃度
团队健康
流行趋势
影响力
:与代码提交频次相关
:与项目和用户的issue、pr互动相关
:与团队成员人数和稳定度相关
:与项目近期受关注度相关
:与项目的star、下载量等社交指标相关