[文章]HarmonyOS实战—实现随机更换笑话段子

阅读量0
0
0
1. 单击更换文本
  • 点击按钮更换文本的内容
  • 也可以把文本内容更换为小说之类的

2. 实现案例:
  • 新建项目:TextListenerApplication
  • 段子内容如下,不同的内容之间用虚线分割
  1. 女人真是太娇气了!
  2. 和老婆一起出门,
  3. 走了不到五百米,
  4. 她就嚷嚷着累。
  5. 我只好从她背上下来自己走了。
  6. ---
  7. 女人只会影响我拔刀的速度,
  8. 所以我把刀扔了,
  9. 快来和我处对象...
  10. ---
  11. 小明儿时算命:
  12. 26岁黄袍加身。
  13. 果然,26岁进了美团送外卖。
  14. 算的真准~
  15. ---
  16. 小明:
  17.     你说我这穷日子过到啥时侯是个头啊?
  18. 小红:
  19.     那得看你能活多久了。

复制代码


实现思路:

  • 把文本txt文件复制到 profile
  • 把文件数据给提出来,在JavaSE中一般是以I/O流的形式读取出来的,在HarmonyOS也是类似,但不会直接去用I/O流
  • 在鸿蒙当中,有个叫资源管理器,管理着resources所有的东西,只要是resources里的东西都归资源管理器
  • 所以就可以使用资源管理器去读取txt文件,并把文件的内容加载进来
  • 查看 resources 对象,发现他是一个I/O流,而且是I/O流里的字节流
  • 所以就可以根据流读取文本文件了
  • 选中这行代码,按住 Ctrl + Alt + T,抛出 try-catch
  • 代码实现:
ability_main.xml
  • 给生成的默认Text文本添加个 id,再创建一个 button 组件并加上id
  1. <?xml version="1.0" encoding="utf-8"?>
  2. <DirectionalLayout
  3.     xmlns:ohos="http://schemas.huawei.com/res/ohos"
  4.     ohos:height="match_parent"
  5.     ohos:width="match_parent"
  6.     ohos:alignment="center"
  7.     ohos:orientation="vertical">

  8.     <Text
  9.         ohos:id="$+id:text1"
  10.         ohos:height="match_content"
  11.         ohos:width="match_content"
  12.         ohos:background_element="$graphic:background_ability_main"
  13.         ohos:layout_alignment="horizontal_center"
  14.         ohos:text="$string:mainability_HelloWorld"
  15.         ohos:text_size="40vp"
  16.         />

  17.     <Button
  18.         ohos:id="$+id:but1"
  19.         ohos:height="match_content"
  20.         ohos:width="match_content"
  21.         ohos:text="点我"
  22.         ohos:text_size="100"
  23.         ohos:background_element="red"
  24.         >

  25.     </Button>
  26. </DirectionalLayout>
复制代码

MainAbilitySlice
  1. package com.xdr630.textlistenerapplication.slice;

  2. import com.xdr630.textlistenerapplication.ResourceTable;
  3. import ohos.aafwk.ability.AbilitySlice;
  4. import ohos.aafwk.content.Intent;
  5. import ohos.agp.components.Button;
  6. import ohos.agp.components.Component;
  7. import ohos.agp.components.Text;
  8. import ohos.global.resource.NotExistException;
  9. import ohos.global.resource.Resource;

  10. import java.io.BufferedReader;
  11. import java.io.IOException;
  12. import java.io.InputStreamReader;
  13. import java.util.Random;

  14. public class MainAbilitySlice extends AbilitySlice implements Component.ClickedListener {

  15.     //在onClick方法中要用到 jokes,text1,but1,所以要把他们提升为成员变量
  16.     String[] jokes;
  17.     Text text1;
  18.     Button but1;

  19.     @Override
  20.     public void onStart(Intent intent) {
  21.         super.onStart(intent);
  22.         super.setUIContent(ResourceTable.Layout_ability_main);

  23.         try {
  24.             //用来拼接读取到的所有数据
  25.             StringBuilder *** = new StringBuilder();
  26.             //1.资源管理器
  27.             Resource resource = this.getResourceManager().getResource(ResourceTable.Profile_joke);
  28.             //因为resources是一个字节流,利用字节流可以读取文件中的内容
  29.             //如果直接用字节流读取中文时候,可能会出现乱码,所以要做一个转换
  30.             //把字节流变为字符流再读取就行了
  31.             BufferedReader br = new BufferedReader(new InputStreamReader(resource));
  32.             String line;
  33.             while ((line = br.readLine()) != null){
  34.                 ***.append(line);
  35.             }
  36.             //释放资源
  37.             br.close();

  38.             //当代码执行到这里的时候,资源文件 joke.txt中所有的内容全部读取到 *** 当中
  39.             //利用---将数据进行切割,分成四个段子
  40.             //***是一个StringBuffer,切割的方法是String里的,所以要把***转成String再调用split切割
  41.             jokes = ***.toString().split("---");

  42.             //当我们点击按钮之后,就会给文本框设置一个随机笑话
  43.             //找到文本组件和按钮组件

  44.             text1 = (Text) findComponentById(ResourceTable.Id_text1);

  45.             but1 = (Button) findComponentById(ResourceTable.Id_but1);

  46.             //给按钮添加单击事件
  47.             but1.setClickedListener(this);
  48.         } catch (IOException e) {
  49.             e.printStackTrace();
  50.         } catch (NotExistException e) {
  51.             e.printStackTrace();
  52.         }
  53.     }

  54.     @Override
  55.     public void onActive() {
  56.         super.onActive();
  57.     }

  58.     @Override
  59.     public void onForeground(Intent intent) {
  60.         super.onForeground(intent);
  61.     }

  62.     @Override
  63.     public void onClick(Component component) {
  64.         //当我们点击按钮之后,会从数组里面随机获取一个笑话并设置到文本中
  65.         Random r = new Random();
  66.         //获取随机索引
  67.         int index = r.nextInt(jokes.length);
  68.         //通过随机索引获取段子
  69.         String  randomJoke = jokes[index];
  70.         //把随机的段子设置到文本当中
  71.         text1.setText(randomJoke);
  72.     }
  73. }

复制代码

  • 运行后,段子都比较长展示不下
  • 所以在ability_main.xml 的Text文本中加个属性,表示文本过长就会自动换行
ohos:multiple_lines="true"

回帖

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容图片侵权或者其他问题,请联系本站作侵删。 侵权投诉
链接复制成功,分享给好友