当前位置:   article > 正文

DevEco组件(笔记)_deveco studio text组件

deveco studio text组件

一、组件

一个用户界面至少包含一个布局。

展示出来的元素,都为组件。

组件在未被添加到布局中时,既无法显示也无法交互。

  • 按钮组件
  • 图片组件
  • 文本框组件
  • 文本输入组件
  • 进度组件
  • 滑块组件
  • 多选框组件
  • 单选框组件
  • ....

鸿蒙中,分为两大类:显示类与交互类组件。

  • 显示类:只负责显示数据
  • 交互组件:负责进行交互

父类都是Component(布局也是其子类了,是一个负责装载其他组件的组件)。

二、显示类组件

通用属性

宽高

match_content:包裹内容。

match_parent:填充父类。

具体数值

  • 像素(px):意味着组件大小写死了。
  • vp=fp=(px*160)/ppi(ppi-Pixels Per Inch:屏幕像素点密度=对角线像素点个数/屏幕尺寸)。
  • vp:长度单位,长、宽等。
  • fp:大小单位,字体大小等。

颜色

同其他大多语言取色一样,用16位的光学三原色RGB表示,

                    红绿蓝

十六进制:#FFFFFF

十进制: (255,255,255)

xml中一般用十六进制,代码中用十进制。

内外边距

与CSS相同,

外边距

自身宽高不变向外进行占位,即组件外侧距离其他组件/父件距离的设置

margin:同时设置上下左右四个方向

top/left/right/bottom_margin

内边距

自身向内部进行占位,一般用于设置文本位置

padding:同时设置上下左右四个方向

top/left/right/bottom_padding

Text:文本组件

ohos:multiple_lines:是否允许多行

ohos:max_text_lines:最大行数,默认一行

ohos:truncation_mode:省略文字(前、后、中间)

跑马灯效果

ohos:truncation_mode="auto_scrolling":允许自动滚动

ohos:auto_scrolling_count:文本自动滚动次数

ohos:auto_scrolling_duration:文本多长时间跑完一次(毫秒)

  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="100vp"
  11. ohos:width="300vp"
  12. ohos:text="你好,开发者!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!"
  13. ohos:text_size="150"
  14. ohos:text_color="white"
  15. ohos:truncation_mode="auto_scrolling"
  16. ohos:auto_scrolling_count="unlimited"
  17. ohos:auto_scrolling_duration="20000"
  18. ohos:background_element="black"
  19. />
  20. </DirectionalLayout>

然后需要在布局中用代码激活

现在在页面中激活

  1. package com.example.myapplication.slice;
  2. import com.example.myapplication.ResourceTable;
  3. import ohos.aafwk.ability.AbilitySlice;
  4. import ohos.aafwk.content.Intent;
  5. import ohos.agp.components.Component;
  6. import ohos.agp.components.Text;
  7. public class MainAbilitySlice extends AbilitySlice implements Component.ClickedListener {
  8. @Override
  9. public void onStart(Intent intent) {
  10. super.onStart(intent);
  11. super.setUIContent(ResourceTable.Layout_ability_main);
  12. //1.获取Text
  13. Text text = (Text) findComponentById(ResourceTable.Id_text1);
  14. //2.给Text文本标志添加事件
  15. //表示当我们单击一下的时候,开启跑马灯效果
  16. text.setClickedListener(this);
  17. }
  18. @Override
  19. public void onActive() {
  20. super.onActive();
  21. }
  22. @Override
  23. public void onForeground(Intent intent) {
  24. super.onForeground(intent);
  25. }
  26. @Override
  27. public void onClick(Component component) {
  28. //开启跑马灯效果
  29. Text t = (Text)component;
  30. t.startAutoScrolling();
  31. }
  32. }

Image:图片组件

background_element:背景图片(在图片之下)

Image_src:前景图片(展示的图片)

clip_alignment:裁剪方式

scale_mode:缩放类型

  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. <Image
  9. ohos:height="1000px"
  10. ohos:width="1000px"
  11. ohos:image_src="$media:danganronpa"
  12. ohos:background_element="#000000"
  13. />
  14. </DirectionalLayout>

剪切与缩放

ohos:clip_alignment:当长宽比图片小的时候,设置剪切的位置。

  1. <Image
  2. ohos:height="200px"
  3. ohos:width="200px"
  4. ohos:image_src="$media:danganronpa"
  5. ohos:background_element="#000000"
  6. ohos:clip_alignment="center"
  7. />

 同时,可以用"left|top"代表左上

ohos:scale_mode="inside":等比缩小居中,直至与Image相同或更小时。默认为center,不缩放。

  1. <Image
  2. ohos:height="300px"
  3. ohos:width="300px"
  4. ohos:image_src="$media:danganronpa"
  5. ohos:background_element="#000000"
  6. ohos:scale_mode="inside"
  7. />

 ohos:scale_mode="stretch":拉伸铺满

  1. <Image
  2. ohos:height="700px"
  3. ohos:width="1000px"
  4. ohos:image_src="$media:danganronpa"
  5. ohos:background_element="#000000"
  6. ohos:scale_mode="stretch"
  7. />

ohos:scale_mode="zoom_center":等比放大,直至与窄边一致,居中。

弹框组件

  • 普通弹框(CommonDialog):提示+用户操作
  • 消息提示弹框(ToastDialog):告知用户消息

Context:上下文,界面对象,即要展示在其上。

普通弹框:

默认布局:

  • 标题
  • 提示内容
  • 选择按钮(最多3个)
  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. <Button
  9. ohos:id="$+id:but1"
  10. ohos:height="match_content"
  11. ohos:width="match_content"
  12. ohos:text="点击"
  13. ohos:text_size="40vp"
  14. ohos:background_element="red"
  15. />
  16. </DirectionalLayout
  1. package com.example.myapplication.slice;
  2. import com.example.myapplication.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.window.dialog.CommonDialog;
  8. import ohos.agp.window.dialog.IDialog;
  9. public class MainAbilitySlice extends AbilitySlice implements Component.ClickedListener {
  10. @Override
  11. public void onStart(Intent intent) {
  12. super.onStart(intent);
  13. super.setUIContent(ResourceTable.Layout_ability_main);
  14. Button but = (Button)findComponentById(ResourceTable.Id_but1);
  15. but.setClickedListener(this);
  16. }
  17. @Override
  18. public void onActive() {
  19. super.onActive();
  20. }
  21. @Override
  22. public void onForeground(Intent intent) {
  23. super.onForeground(intent);
  24. }
  25. @Override
  26. public void onClick(Component component) {
  27. //创建弹框对象
  28. CommonDialog cd = new CommonDialog(this);
  29. cd.setTitleText("提示");
  30. cd.setContentText("已经点击按钮");
  31. //自动关闭弹窗,点击灰色区域自动关闭
  32. cd.setAutoClosable(true);
  33. //索引(0、1、2),按钮的文字、点击事件
  34. cd.setButton(0, "取消", new IDialog.ClickedListener() {
  35. @Override
  36. public void onClick(IDialog iDialog, int i) {
  37. //事件内容
  38. //销毁弹窗
  39. cd.destroy();
  40. }
  41. });
  42. cd.setButton(1,"确定",null);
  43. //显示弹框
  44. cd.show();
  45. }
  46. }

抽取工具类

通常我们使用时,为了避免写这么多的代码,会将代码写为一个工具类,然后直接调用。

新建一个package包,和class

 当然,可以通过增加传递的参数,使其更加灵活的表示我们需要的弹窗。

  1. package com.example.myapplication.dialogutils;
  2. import ohos.agp.window.dialog.CommonDialog;
  3. import ohos.agp.window.dialog.IDialog;
  4. import ohos.app.Context;
  5. public class myDialog {
  6. public static void showDialog(Context context,String msg){
  7. //创建弹框对象
  8. CommonDialog cd = new CommonDialog(context);
  9. cd.setTitleText("提示");
  10. cd.setContentText(msg);
  11. //自动关闭弹窗,点击灰色区域自动关闭
  12. cd.setAutoClosable(true);
  13. //索引(0、1、2),按钮的文字、点击事件
  14. cd.setButton(0, "取消", new IDialog.ClickedListener() {
  15. @Override
  16. public void onClick(IDialog iDialog, int i) {
  17. //事件内容
  18. //销毁弹窗
  19. cd.destroy();
  20. }
  21. });
  22. cd.setButton(1,"确定",null);
  23. //显示弹框
  24. cd.show();
  25. }
  26. }

然后修改我们的前面的Slice的点击事件

  1. import com.example.myapplication.dialogutils.myDialog;
  2. @Override
  3. public void onClick(Component component) {
  4. myDialog.showDialog(this,"已完成点击");
  5. }

消息提示弹框/吐司弹框

是普通弹框的子类。

  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. <Button
  9. ohos:id="$+id:but1"
  10. ohos:height="match_content"
  11. ohos:width="match_content"
  12. ohos:text="点击"
  13. ohos:text_size="40fp"
  14. ohos:text_color="#FFFFFF"
  15. ohos:background_element="#2136FD"
  16. />
  17. </DirectionalLayout>
  1. package com.example.myapplication.slice;
  2. import com.example.myapplication.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.utils.LayoutAlignment;
  8. import ohos.agp.window.dialog.ToastDialog;
  9. public class MainAbilitySlice extends AbilitySlice implements Component.ClickedListener {
  10. @Override
  11. public void onStart(Intent intent) {
  12. super.onStart(intent);
  13. super.setUIContent(ResourceTable.Layout_ability_main);
  14. Button but = (Button)findComponentById(ResourceTable.Id_but1);
  15. but.setClickedListener(this);
  16. }
  17. @Override
  18. public void onActive() {
  19. super.onActive();
  20. }
  21. @Override
  22. public void onForeground(Intent intent) {
  23. super.onForeground(intent);
  24. }
  25. @Override
  26. public void onClick(Component component) {
  27. ToastDialog td = new ToastDialog(this);
  28. //设置文本内容
  29. td.setText("已经点击");
  30. //居中放置
  31. td.setAlignment(LayoutAlignment.CENTER);
  32. //设置时长
  33. td.setDuration(2000);
  34. td.show();
  35. }
  36. }

用xml中格式设置吐司弹窗抽取工具类的格式

创建一个新的xml

  1. <?xml version="1.0" encoding="utf-8"?>
  2. <DirectionalLayout
  3. xmlns:ohos="http://schemas.huawei.com/res/ohos"
  4. ohos:height="match_content"
  5. ohos:width="match_content"
  6. ohos:orientation="vertical">
  7. <Text
  8. ohos:id="$+id:msg"
  9. ohos:height="match_content"
  10. ohos:width="match_content"
  11. ohos:text_size="30fp"
  12. ohos:text_color="#FFFFFF"
  13. ohos:text_alignment="center"
  14. ohos:background_element="#464343"
  15. />
  16. </DirectionalLayout>

接着创建一个抽取工具类

  1. package com.example.myapplication.dialogutils;
  2. import com.example.myapplication.ResourceTable;
  3. import ohos.agp.components.DirectionalLayout;
  4. import ohos.agp.components.LayoutScatter;
  5. import ohos.agp.components.Text;
  6. import ohos.agp.utils.LayoutAlignment;
  7. import ohos.agp.window.dialog.ToastDialog;
  8. import ohos.app.Context;
  9. public class myDialog {
  10. public static void showToast(Context context,String message){
  11. //加载布局对象
  12. //LayoutScatter:布局工具类
  13. //getInstance:获取实例。即通过该方法,布局对象获取context对象中所需值。
  14. //parse:通过该方法,导入布局信息,加载xml的ID,是否依赖其他,是否依赖其他
  15. DirectionalLayout dl = (DirectionalLayout) LayoutScatter.getInstance(context).parse(ResourceTable.Layout_mytoast,null,false);
  16. //加载文本组件
  17. Text msg = (Text)dl.findComponentById(ResourceTable.Id_msg);
  18. //设置到文本组件中
  19. msg.setText(message);
  20. ToastDialog td = new ToastDialog(context);
  21. //设置吐司大小,通过布局类来设置
  22. td.setSize(DirectionalLayout.LayoutConfig.MATCH_CONTENT,DirectionalLayout.LayoutConfig.MATCH_CONTENT);
  23. //设置事件
  24. td.setDuration(2000);
  25. //对齐方式
  26. td.setAlignment(LayoutAlignment.TOP);
  27. //将xml布局交给吐司
  28. td.setContentCustomComponent(dl);
  29. //让吐司出现
  30. td.show();
  31. }
  32. }

现在修改点击事件

  1. import com.example.myapplication.dialogutils.myDialog;
  2. @Override
  3. public void onClick(Component component) {
  4. myDialog.showToast(this,"已经点击");
  5. }

时钟组件

time_zone="UTC":时区,GMT(格林威治标准时间)、CST、DST、UTC等

mode_24_hour(默认):24小时制度

mode_12_hour:12小时制度

  • y-年
  • M-月
  • d-月份中的天数
  • H-24时制度(0-23)
  • m-小时中的分钟
  • s-分钟中的秒数
  • S-毫秒数
  • w-年份中的周数
  • W-月份中的周数
  • D-年份中的天数
  • F-月份中的星期
  • E-星期中的天数
  • a-am/pm标记
  • k-24时制度(1-24)
  • K-am/pm中的小时数(0-11)
  • h-am/pm中的小时数(1-12)
  • Z-时区,数字
  • z-时区,详细

24小时

  1. <Clock
  2. ohos:height="match_content"
  3. ohos:width="match_content"
  4. ohos:text_size="30fp"
  5. ohos:time_zone="UTC"
  6. ohos:mode_24_hour="y年M月d日 H:m:s"
  7. />

12小时 

12小时制度有bug,不可以在xml中直接指定,需要在页面中设置。(笔者写的时候还没有修复)

  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. <Clock
  9. ohos:id="$+id:clock1"
  10. ohos:height="match_content"
  11. ohos:width="match_content"
  12. ohos:text_size="20fp"
  13. ohos:time_zone="UTC"
  14. />
  15. </DirectionalLayout>
  1. package com.example.myapplication.slice;
  2. import com.example.myapplication.ResourceTable;
  3. import ohos.aafwk.ability.AbilitySlice;
  4. import ohos.aafwk.content.Intent;
  5. import ohos.agp.components.Clock;
  6. public class MainAbilitySlice extends AbilitySlice{
  7. @Override
  8. public void onStart(Intent intent) {
  9. super.onStart(intent);
  10. super.setUIContent(ResourceTable.Layout_ability_main);
  11. Clock clock = (Clock) findComponentById(ResourceTable.Id_clock1);
  12. clock.set24HourModeEnabled(false);//关闭24小时制
  13. clock.setFormatIn12HourMode( "y年M月d日 h:m:s a");
  14. }
  15. @Override
  16. public void onActive() {
  17. super.onActive();
  18. }
  19. @Override
  20. public void onForeground(Intent intent) {
  21. super.onForeground(intent);
  22. }
  23. }

 定时器

  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. <TickTimer
  9. ohos:id="$+id:ticker"
  10. ohos:height="match_content"
  11. ohos:width="match_content"
  12. ohos:text_size="30fp"
  13. ohos:text_color="#FFFFFF"
  14. ohos:background_element="#0000FF"
  15. ohos:text_alignment="center"
  16. ohos:layout_alignment="center"
  17. />
  18. <Button
  19. ohos:id="$+id:start"
  20. ohos:width="match_content"
  21. ohos:height="match_content"
  22. ohos:text="开始计时"
  23. ohos:text_size="30fp"
  24. ohos:text_color="#FFFFFF"
  25. ohos:background_element="#666600"
  26. ohos:text_alignment="center"
  27. ohos:layout_alignment="center"
  28. ohos:top_margin="30vp"
  29. />
  30. <Button
  31. ohos:id="$+id:end"
  32. ohos:width="match_content"
  33. ohos:height="match_content"
  34. ohos:text="结束计时"
  35. ohos:text_size="30fp"
  36. ohos:text_color="#FFFFFF"
  37. ohos:background_element="#666600"
  38. ohos:text_alignment="center"
  39. ohos:layout_alignment="center"
  40. ohos:top_margin="30vp"
  41. />
  42. </DirectionalLayout>
  1. package com.example.myapplication.slice;
  2. import com.example.myapplication.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.TickTimer;
  8. public class MainAbilitySlice extends AbilitySlice implements Component.ClickedListener {
  9. TickTimer tickTimer;
  10. Button start;
  11. Button end;
  12. @Override
  13. public void onStart(Intent intent) {
  14. super.onStart(intent);
  15. super.setUIContent(ResourceTable.Layout_ability_main);
  16. tickTimer = (TickTimer)findComponentById(ResourceTable.Id_ticker);
  17. start = (Button)findComponentById(ResourceTable.Id_start);
  18. end = (Button)findComponentById(ResourceTable.Id_end);
  19. start.setClickedListener(this);
  20. end.setClickedListener(this);
  21. //设置定时器
  22. //false:正向计时,0,1,2,3,4...
  23. //true:反向计时,5,4,3,2,1,0
  24. tickTimer.setCountDown(false);
  25. //计时格式
  26. tickTimer.setFormat("m:s");
  27. }
  28. @Override
  29. public void onActive() {
  30. super.onActive();
  31. }
  32. @Override
  33. public void onForeground(Intent intent) {
  34. super.onForeground(intent);
  35. }
  36. @Override
  37. public void onClick(Component component) {
  38. if(component == start){
  39. tickTimer.start();
  40. }
  41. else if (component == end){
  42. tickTimer.stop();
  43. }
  44. }
  45. }

BUG? 

  • 开始计时时,时间似乎不是0
  • 结束计时时,界面停止(比如9s),但是后台仍旧在执行,重新开始(间隔10s)的时候,本应该从结束处(9s)开始继续计时,结果连间隔时间也算进去了(即,从19s开始)。
  • tickTimer.setBaseTime(0):设置基准时间,如果没有设置时间,从时间原点计时;为0,则是从当前(实际)时间计时 ;非0,也是从当前时间开始计时,参数为 3600*1000,是从当前时间开始,减少

进度条

Progress进度条组件

ohos:progress="":进度条实际填充颜色

ohos:progress_hint_text="0%":进度条显示文字

  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. <ProgressBar
  9. ohos:id="$+id:pb"
  10. ohos:height="match_content"
  11. ohos:width="300vp"
  12. ohos:progress="0"
  13. ohos:progress_hint_text="0%"
  14. ohos:progress_hint_text_color="#000000"
  15. ohos:progress_width="50vp"
  16. ohos:progress_color="#FF0000"
  17. ohos:max="100"
  18. ohos:min="0"
  19. />
  20. </DirectionalLayout>

 每点一次,加15%

  1. package com.example.myapplication.slice;
  2. import com.example.myapplication.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.ProgressBar;
  8. import ohos.agp.components.TickTimer;
  9. public class MainAbilitySlice extends AbilitySlice implements Component.ClickedListener {
  10. @Override
  11. public void onStart(Intent intent) {
  12. super.onStart(intent);
  13. super.setUIContent(ResourceTable.Layout_ability_main);
  14. ProgressBar pb = (ProgressBar) findComponentById(ResourceTable.Id_pb);
  15. //每点击一次进度条,加5%
  16. pb.setClickedListener(this);
  17. }
  18. @Override
  19. public void onActive() {
  20. super.onActive();
  21. }
  22. @Override
  23. public void onForeground(Intent intent) {
  24. super.onForeground(intent);
  25. }
  26. @Override
  27. public void onClick(Component component) {
  28. ProgressBar pb = (ProgressBar) component;
  29. int value = pb.getProgress();
  30. value = value+5;
  31. if(value>100){
  32. return;
  33. }
  34. pb.setProgressValue(value);
  35. pb.setProgressHintText(value+"%");
  36. }
  37. }

RoundProgressBar

Progress进度条组件的子类

  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. <RoundProgressBar
  9. ohos:id="$+id:pb"
  10. ohos:height="300vp"
  11. ohos:width="300vp"
  12. ohos:progress="0"
  13. ohos:progress_hint_text="0%"
  14. ohos:progress_hint_text_size="50vp"
  15. ohos:progress_hint_text_color="#000000"
  16. ohos:progress_width="20vp"
  17. ohos:progress_color="#FF0000"
  18. ohos:max="100"
  19. ohos:min="0"
  20. />
  21. </DirectionalLayout>

三、交互类组件 

TextField文本输入框组件

  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:orientation="vertical"
  7. ohos:background_element="#F2F2F2"
  8. >
  9. <TextField
  10. ohos:id="$+id:text"
  11. ohos:height="50vp"
  12. ohos:width="319vp"
  13. ohos:hint="请输入信息"
  14. ohos:text_size="17fp"
  15. ohos:text_color="#999999"
  16. ohos:text_alignment="center"
  17. ohos:top_margin="100vp"
  18. ohos:layout_alignment="horizontal_center"
  19. ohos:background_element="#FFFFFF"
  20. />
  21. </DirectionalLayout>

 现在为其添加一个Button

  1. <Button
  2. ohos:id="$+id:but"
  3. ohos:height="47vp"
  4. ohos:width="319vp"
  5. ohos:text="获取信息"
  6. ohos:text_size="24vp"
  7. ohos:text_color="#FEFEFE"
  8. ohos:text_alignment="center"
  9. ohos:background_element="#21a8FD"
  10. ohos:top_margin="77vp"
  11. ohos:layout_alignment="center"
  12. />
  1. package com.example.myapplication.slice;
  2. import com.example.myapplication.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.TextField;
  8. import ohos.agp.utils.LayoutAlignment;
  9. import ohos.agp.window.dialog.ToastDialog;
  10. public class MainAbilitySlice extends AbilitySlice implements Component.ClickedListener {
  11. TextField tf;
  12. Button but;
  13. @Override
  14. public void onStart(Intent intent) {
  15. super.onStart(intent);
  16. super.setUIContent(ResourceTable.Layout_ability_main);
  17. tf = (TextField) findComponentById(ResourceTable.Id_text);
  18. but = (Button)findComponentById(ResourceTable.Id_but);
  19. but.setClickedListener(this);
  20. }
  21. @Override
  22. public void onActive() {
  23. super.onActive();
  24. }
  25. @Override
  26. public void onForeground(Intent intent) {
  27. super.onForeground(intent);
  28. }
  29. @Override
  30. public void onClick(Component component) {
  31. String message = tf.getText();
  32. ToastDialog td = new ToastDialog(this);
  33. td.setTransparent(true);
  34. td.setAlignment(LayoutAlignment.BOTTOM);
  35. td.setOffset(0,200);
  36. td.setText(message);
  37. td.show();
  38. }
  39. }

文本高级设置
ohos:text_input_type="":设置文本类型

ohos:basement="":设置下划线颜色

ohos:element_selection_left_bubble="":选中时,左侧气泡提示,可以是颜色或者图片

ohos:element_selection_right_bubble="":选中时,右侧气泡提示,可以是颜色或者图片

ohos:element_cursor_bubble="":气泡提示,可以是颜色或者图片

加密格式

  1. <TextField
  2. ohos:id="$+id:text"
  3. ohos:height="50vp"
  4. ohos:width="319vp"
  5. ohos:hint="请输入信息"
  6. ohos:text_size="17fp"
  7. ohos:text_color="#999999"
  8. ohos:text_alignment="center"
  9. ohos:top_margin="100vp"
  10. ohos:layout_alignment="horizontal_center"
  11. ohos:text_input_type="pattern_password"
  12. ohos:background_element="#FFFFFF"
  13. ohos:basement="#000000"
  14. ohos:element_selection_left_bubble="$media:danganronpa"
  15. ohos:element_selection_right_bubble="$media:danganronpa"
  16. ohos:element_cursor_bubble="#FF0000"
  17. />

Checkbox多选框组件

选择点+属性

ohos:marked="false":为true时表示默认选中该项

ohos:check_element="":选择区图片/颜色

  1. <Checkbox
  2. ohos:id="$+id:cb"
  3. ohos:height="match_content"
  4. ohos:width="match_content"
  5. ohos:text="玩游戏"
  6. ohos:marked="false"
  7. ohos:text_size="30fp"
  8. />
  1. package com.example.myapplication.slice;
  2. import com.example.myapplication.ResourceTable;
  3. import ohos.aafwk.ability.AbilitySlice;
  4. import ohos.aafwk.content.Intent;
  5. import ohos.agp.components.Button;
  6. import ohos.agp.components.Checkbox;
  7. import ohos.agp.components.TextField;
  8. import ohos.agp.utils.LayoutAlignment;
  9. import ohos.agp.window.dialog.ToastDialog;
  10. public class MainAbilitySlice extends AbilitySlice
  11. @Override
  12. public void onStart(Intent intent) {
  13. super.onStart(intent);
  14. super.setUIContent(ResourceTable.Layout_ability_main);
  15. Checkbox checkbox = (Checkbox) findComponentById(ResourceTable.Id_cb);
  16. checkbox.setChecked(true);
  17. boolean checked = checkbox.isChecked();
  18. if(checked){
  19. ToastDialog td = new ToastDialog(this);
  20. td.setAlignment(LayoutAlignment.BOTTOM);
  21. td.setDuration(2000);
  22. td.setText(checkbox.getText());
  23. td.show();
  24. }
  25. }
  26. @Override
  27. public void onActive() {
  28. super.onActive();
  29. }
  30. @Override
  31. public void onForeground(Intent intent) {
  32. super.onForeground(intent);
  33. }
  34. }

多选框状态监听事件

当多选框状态改变就会被调用,当然,用单机事件也可以模拟

  1. package com.example.myapplication.slice;
  2. import com.example.myapplication.ResourceTable;
  3. import ohos.aafwk.ability.AbilitySlice;
  4. import ohos.aafwk.content.Intent;
  5. import ohos.agp.components.AbsButton;
  6. import ohos.agp.components.Button;
  7. import ohos.agp.components.Checkbox;
  8. import ohos.agp.components.TextField;
  9. import ohos.agp.utils.LayoutAlignment;
  10. import ohos.agp.window.dialog.ToastDialog;
  11. public class MainAbilitySlice extends AbilitySlice implements AbsButton.CheckedStateChangedListener {
  12. @Override
  13. public void onStart(Intent intent) {
  14. super.onStart(intent);
  15. super.setUIContent(ResourceTable.Layout_ability_main);
  16. Checkbox checkbox = (Checkbox) findComponentById(ResourceTable.Id_cb);
  17. checkbox.setChecked(true);
  18. checkbox.setCheckedStateChangedListener(this);
  19. }
  20. @Override
  21. public void onActive() {
  22. super.onActive();
  23. }
  24. @Override
  25. public void onForeground(Intent intent) {
  26. super.onForeground(intent);
  27. }
  28. @Override
  29. public void onCheckedChanged(AbsButton absButton, boolean b) {
  30. ToastDialog td = new ToastDialog(this);
  31. td.setAlignment(LayoutAlignment.BOTTOM);
  32. td.setDuration(2000);
  33. if(b){
  34. td.setText(absButton.getText());
  35. }
  36. else{
  37. td.setText("已取消");
  38. }
  39. td.show();
  40. }
  41. }

RadioButton单选框组件

  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. ohos:background_element="#F2F2F2"
  9. >
  10. <RadioContainer
  11. ohos:id="$+id:rc"
  12. ohos:height="match_content"
  13. ohos:width="match_content">
  14. <RadioButton
  15. ohos:id="$+id:man"
  16. ohos:height="match_content"
  17. ohos:width="match_content"
  18. ohos:text="男"
  19. ohos:text_size="30fp"
  20. ohos:text_alignment="center"
  21. ohos:marked="true"
  22. />
  23. <RadioButton
  24. ohos:id="$+id:woman"
  25. ohos:height="match_content"
  26. ohos:width="match_content"
  27. ohos:text="女"
  28. ohos:text_size="30fp"
  29. ohos:text_alignment="center"
  30. ohos:marked="false"
  31. />
  32. </RadioContainer>
  33. </DirectionalLayout>
  1. package com.example.myapplication.slice;
  2. import com.example.myapplication.ResourceTable;
  3. import ohos.aafwk.ability.AbilitySlice;
  4. import ohos.aafwk.content.Intent;
  5. import ohos.agp.components.Button;
  6. import ohos.agp.components.RadioButton;
  7. import ohos.agp.components.RadioContainer;
  8. import ohos.agp.components.TextField;
  9. import ohos.agp.utils.LayoutAlignment;
  10. import ohos.agp.window.dialog.ToastDialog;
  11. public class MainAbilitySlice extends AbilitySlice implements RadioContainer.CheckedStateChangedListener {
  12. @Override
  13. public void onStart(Intent intent) {
  14. super.onStart(intent);
  15. super.setUIContent(ResourceTable.Layout_ability_main);
  16. RadioButton rb1 = (RadioButton)findComponentById(ResourceTable.Id_man);
  17. RadioButton rb2 = (RadioButton)findComponentById(ResourceTable.Id_woman);
  18. RadioContainer rc = (RadioContainer)findComponentById(ResourceTable.Id_rc) ;
  19. rb1.setChecked(false);
  20. rb2.setChecked(true);
  21. rc.setMarkChangedListener(this);
  22. }
  23. @Override
  24. public void onActive() {
  25. super.onActive();
  26. }
  27. @Override
  28. public void onForeground(Intent intent) {
  29. super.onForeground(intent);
  30. }
  31. @Override
  32. public void onCheckedChanged(RadioContainer radioContainer, int i) {
  33. RadioButton rb = (RadioButton) radioContainer.getComponentAt(i);
  34. ToastDialog td = new ToastDialog(this);
  35. td.setAlignment(LayoutAlignment.BOTTOM);
  36. td.setDuration(2000);
  37. if(rb.isChecked()){
  38. td.setText(rb.getText());
  39. }
  40. td.show();
  41. }
  42. }

switch开关组件

由滑块+滑轨组成

        ohos:thumb_element="":滑块图片/颜色设置
        ohos:track_element="":滑轨图片/颜色设置

  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. >
  9. <Switch
  10. ohos:id="$+id:slibar1"
  11. ohos:width="100vp"
  12. ohos:height="40vp"
  13. ohos:text_state_on="开"
  14. ohos:text_state_off="关"
  15. ohos:text_size="20vp"
  16. />
  17. </DirectionalLayout>

 默认滑块是圆形,自己设置后将需要自己设置,因此,这里先用默认设置。同时,因为switch是JAVA关键字,因此需要避免相关

  1. package com.example.myapplication.slice;
  2. import com.example.myapplication.ResourceTable;
  3. import ohos.aafwk.ability.AbilitySlice;
  4. import ohos.aafwk.content.Intent;
  5. import ohos.agp.components.*;
  6. import ohos.agp.utils.LayoutAlignment;
  7. import ohos.agp.window.dialog.ToastDialog;
  8. public class MainAbilitySlice extends AbilitySlice implements AbsButton.CheckedStateChangedListener {
  9. @Override
  10. public void onStart(Intent intent) {
  11. super.onStart(intent);
  12. super.setUIContent(ResourceTable.Layout_ability_main);
  13. Switch slibar=(Switch) findComponentById(ResourceTable.Id_slibar1);
  14. slibar.setCheckedStateChangedListener(this);
  15. }
  16. @Override
  17. public void onActive() {
  18. super.onActive();
  19. }
  20. @Override
  21. public void onForeground(Intent intent) {
  22. super.onForeground(intent);
  23. }
  24. @Override
  25. public void onCheckedChanged(AbsButton absButton, boolean b) {
  26. ToastDialog td = new ToastDialog(this);
  27. td.setAlignment(LayoutAlignment.BOTTOM);
  28. td.setDuration(2000);
  29. if(b) {
  30. td.setText("开启");
  31. }
  32. else{
  33. td.setText("关闭");
  34. }
  35. td.show();
  36. }
  37. }

slider滑块

进度条组件(ProgressBar)的后代

进度条+滑块

  • 已完成进度颜色/图片(已浏览):ohos:progress_color=""
  • 已完成进度值(滑块位置):ohos:progress=""
  • 是否可以拖动设置(拖动进度条):ohos:enabled="",默认是true
  • 滑块颜色/图片(当前位置):ohos:thumb_element=""
  • 总进度颜色/图片(总长度):ohos:background_instruct_element=""
  • 次一级进度值(缓冲):ohos:vice_progress=""
  • 次一级进度颜色/图片(缓冲):ohos:vice_progress_element=""
  1. <Slider
  2. ohos:height="50vp"
  3. ohos:width="300vp"
  4. />

同理,在设置后,默认的美化设置会被清空。

  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. >
  9. <Slider
  10. ohos:id="$+id:slider"
  11. ohos:height="50vp"
  12. ohos:width="300vp"
  13. ohos:enabled="true"
  14. ohos:background_instruct_element="#0000FF"
  15. ohos:progress_color="#FF0000"
  16. ohos:thumb_element="#00FF00"
  17. ohos:vice_progress="80"
  18. ohos:vice_progress_element="#923456"
  19. ohos:max="100"
  20. ohos:min="0"
  21. />
  22. </DirectionalLayout>
  1. package com.example.myapplication.slice;
  2. import com.example.myapplication.ResourceTable;
  3. import ohos.aafwk.ability.AbilitySlice;
  4. import ohos.aafwk.content.Intent;
  5. import ohos.agp.components.*;
  6. import ohos.agp.utils.LayoutAlignment;
  7. import ohos.agp.window.dialog.ToastDialog;
  8. public class MainAbilitySlice extends AbilitySlice implements Slider.ValueChangedListener {
  9. @Override
  10. public void onStart(Intent intent) {
  11. super.onStart(intent);
  12. super.setUIContent(ResourceTable.Layout_ability_main);
  13. Slider slider = (Slider)findComponentById(ResourceTable.Id_slider);
  14. slider.setValueChangedListener(this);
  15. }
  16. @Override
  17. public void onActive() {
  18. super.onActive();
  19. }
  20. @Override
  21. public void onForeground(Intent intent) {
  22. super.onForeground(intent);
  23. }
  24. //当进度值改变
  25. //滑块组件的对象
  26. //当前进度值
  27. //如果enabled为true,b则为true
  28. @Override
  29. public void onProgressUpdated(Slider slider, int i, boolean b) {
  30. ToastDialog td = new ToastDialog(this);
  31. td.setAlignment(LayoutAlignment.BOTTOM);
  32. td.setDuration(500);
  33. td.setText("当前进度为:"+ i);
  34. td.show();
  35. }
  36. //下面两个方法会反复调用onProgressUpdated,它们本身在一次监听中只会调用一次
  37. //当用户鼠标或手指,按下滑块且不松开时
  38. @Override
  39. public void onTouchStart(Slider slider) {
  40. ToastDialog td = new ToastDialog(this);
  41. td.setAlignment(LayoutAlignment.BOTTOM);
  42. td.setDuration(500);
  43. td.setText("按下");
  44. td.show();
  45. }
  46. //当用户鼠标或手指,松开滑块时
  47. @Override
  48. public void onTouchEnd(Slider slider) {
  49. ToastDialog td = new ToastDialog(this);
  50. td.setAlignment(LayoutAlignment.BOTTOM);
  51. td.setDuration(500);
  52. td.setText("松开");
  53. td.show();
  54. }
  55. }

由于这里用的是吐司,设置持续时间是500毫秒,因此会出现”延迟“的现象,可以通过修改Text的方式来呈现。

案例:图片缩放与拖动

  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. >
  9. <Image
  10. ohos:id="$+id:danganronpa"
  11. ohos:height="match_content"
  12. ohos:width="match_content"
  13. ohos:image_src="$media:danganronpa"/>
  14. <Slider
  15. ohos:id="$+id:slider"
  16. ohos:height="50vp"
  17. ohos:width="300vp"
  18. ohos:background_instruct_element="#667755"
  19. ohos:max="100"
  20. ohos:min="1"
  21. ohos:progress="10"
  22. />
  23. </DirectionalLayout>
  1. package com.example.myapplication.slice;
  2. import com.example.myapplication.ResourceTable;
  3. import ohos.aafwk.ability.AbilitySlice;
  4. import ohos.aafwk.content.Intent;
  5. import ohos.agp.components.*;
  6. import ohos.multimodalinput.event.MmiPoint;
  7. import ohos.multimodalinput.event.TouchEvent;
  8. public class MainAbilitySlice extends AbilitySlice implements Slider.ValueChangedListener ,Component.TouchEventListener{
  9. Image img;
  10. float x1;//手指按下位置x轴
  11. float y1;//手指按下位置y轴
  12. float imgX;//图片左上角坐标X
  13. float imgY;//图片左上角坐标Y
  14. @Override
  15. public void onStart(Intent intent) {
  16. super.onStart(intent);
  17. super.setUIContent(ResourceTable.Layout_ability_main);
  18. img = (Image)findComponentById(ResourceTable.Id_danganronpa);
  19. Slider slider = (Slider)findComponentById(ResourceTable.Id_slider);
  20. slider.setValueChangedListener(this);
  21. img.setTouchEventListener(this);
  22. }
  23. @Override
  24. public void onActive() {
  25. super.onActive();
  26. }
  27. @Override
  28. public void onForeground(Intent intent) {
  29. super.onForeground(intent);
  30. }
  31. @Override
  32. public void onProgressUpdated(Slider slider, int i, boolean b) {
  33. //放大或许缩小多少,(min:1~max:100)*0.1
  34. float rate = (float)(i *0.1);
  35. img.setScale(rate,rate);
  36. }
  37. @Override
  38. public void onTouchStart(Slider slider) {
  39. }
  40. @Override
  41. public void onTouchEnd(Slider slider) {
  42. }
  43. @Override
  44. public boolean onTouchEvent(Component component, TouchEvent touchEvent) {
  45. int action = touchEvent.getAction();
  46. MmiPoint postion = touchEvent.getPointerPosition(0);
  47. switch(action) {
  48. case TouchEvent.PRIMARY_POINT_DOWN: {//手指按下位置
  49. x1 = postion.getX();
  50. y1 = postion.getY();
  51. imgX = img.getTranslationX();
  52. imgY = img.getTranslationY();
  53. break;
  54. }
  55. case TouchEvent.POINT_MOVE: {//手指按下移动
  56. float x2 = postion.getX();
  57. float y2 = postion.getY();
  58. float x = x2 - x1;
  59. float y = y2 - y1;
  60. img.setTranslation(imgX + x, imgY + y);
  61. break;
  62. }
  63. default: {
  64. throw new IllegalStateException("Unexpected value: " + action);
  65. }
  66. }
  67. return true;
  68. }
  69. }

ListContainer列表容器组件

  • 其容器里面是由许多item填充
  • 需要准备一个统一的item布局格式
  • 需要用javabean类去表示item
  • 需要一个适配器去管理每一个item
  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. >
  9. <ListContainer
  10. ohos:id="$+id:listContainer"
  11. ohos:height="match_content"
  12. ohos:width="match_content"
  13. ohos:layout_alignment="horizontal_center"/>
  14. </DirectionalLayout>

另创建一个布局xml

  1. <?xml version="1.0" encoding="utf-8"?>
  2. <DirectionalLayout
  3. xmlns:ohos="http://schemas.huawei.com/res/ohos"
  4. ohos:height="match_content"
  5. ohos:width="match_content"
  6. ohos:orientation="vertical">
  7. <Text
  8. ohos:id="$+id:itemtext"
  9. ohos:height="50vp"
  10. ohos:width="match_parent"
  11. ohos:text_size="35fp"/>
  12. </DirectionalLayout>

 新建一个package(domain),再创建一个class作为javebeen包(Item)。

 

  1. package com.example.myapplication.domain;
  2. public class Item {
  3. private String text;//用于给item中text赋值
  4. public Item() {
  5. }
  6. public Item(String text) {
  7. this.text = text;
  8. }
  9. public String getText(){
  10. return text;
  11. }
  12. public void setText(String text){
  13. this.text = text;
  14. }
  15. }

准备一个适配器(ItemProvider),去管理item

 

  1. package com.example.myapplication.provider;
  2. import com.example.myapplication.domain.Item;
  3. import ohos.agp.components.*;
  4. import com.example.myapplication.ResourceTable;
  5. import ohos.aafwk.ability.AbilitySlice;
  6. import java.util.ArrayList;
  7. public class ItemProvider extends BaseItemProvider {
  8. private ArrayList<Item> list;//用于存储所有Item对象
  9. private AbilitySlice as;
  10. public ItemProvider( ArrayList<Item> list,AbilitySlice as) {
  11. this.list = list;
  12. this.as = as;
  13. }
  14. public ArrayList<Item> getList(){
  15. return list;
  16. }
  17. public void setList(ArrayList<Item> list){
  18. this.list = list;
  19. }
  20. public AbilitySlice getAs(AbilitySlice as){
  21. return as;
  22. }
  23. public void setAs(AbilitySlice as){
  24. this.as = as;
  25. }
  26. //返回总数
  27. @Override
  28. public int getCount() {
  29. return list.size();
  30. }
  31. //索引
  32. @Override
  33. public Object getItem(int i) {
  34. if(list!=null&&i>=0&&i<list.size()){
  35. return list.get(i);
  36. }
  37. return null;
  38. }
  39. //返回某一项的ID
  40. @Override
  41. public long getItemId(int i) {
  42. return i;
  43. }
  44. @Override
  45. public Component getComponent(int i, Component component, ComponentContainer componentContainer) {
  46. //获取布局对象
  47. DirectionalLayout dl =(DirectionalLayout)LayoutScatter.getInstance(as).parse(ResourceTable.Layout_itemview,null,false);
  48. //获取数据
  49. Item item = list.get(i);
  50. //将布局中的text拿出
  51. Text text = (Text) dl.findComponentById(ResourceTable.Id_itemtext);
  52. //设置文本内容
  53. text.setText(item.getText());
  54. //返回该布局,布局包裹了text
  55. return dl;
  56. }
  57. }

 回到MainAbilitySlice

  1. package com.example.myapplication.slice;
  2. import com.example.myapplication.ResourceTable;
  3. import com.example.myapplication.provider.ItemProvider;
  4. import ohos.aafwk.ability.AbilitySlice;
  5. import ohos.aafwk.content.Intent;
  6. import ohos.agp.components.ListContainer;
  7. import com.example.myapplication.domain.Item;
  8. import java.util.ArrayList;
  9. public class MainAbilitySlice extends AbilitySlice{
  10. @Override
  11. public void onStart(Intent intent) {
  12. super.onStart(intent);
  13. super.setUIContent(ResourceTable.Layout_ability_main);
  14. ListContainer listContainer = (ListContainer) findComponentById(ResourceTable.Id_listContainer);
  15. //创建一个数据集合
  16. ArrayList<Item> dataList = getData();
  17. //创建一个管理员对象
  18. ItemProvider itemProviderp = new ItemProvider(dataList,this);
  19. //将适配器交给列表容器
  20. listContainer.setItemProvider(itemProviderp);
  21. }
  22. @Override
  23. public void onActive() {
  24. super.onActive();
  25. }
  26. @Override
  27. public void onForeground(Intent intent) {
  28. super.onForeground(intent);
  29. }
  30. public ArrayList<Item> getData(){
  31. ArrayList<Item> list = new ArrayList<>();
  32. for(int i =0;i<100;i++){
  33. list.add(new Item("item"+i));
  34. }
  35. return list;
  36. }
  37. }

基本优化

  • 在适配器类中有一个getComponet方法,每加载一次item就会调用一次getComponet方法。
  • 同时,适配器类会进行预加载,在显示屏中,会提前在当前进方向外多加载一个item。
  • 当item划出屏幕时,就会被销毁。

由此代码会导致内存之中产生大量的dl垃圾,由此进行最基本优化。

  1. //i指的是加载哪一行item
  2. //Component表示当前要销毁的Component
  3. //Component容器,装载已有的Component
  4. @Override
  5. public Component getComponent(int i, Component component, ComponentContainer componentContainer) {
  6. DirectionalLayout dl;
  7. //获取布局对象
  8. if(component!=null){
  9. //将要销毁的component的布局赋值给要生成的component的布局
  10. dl = (DirectionalLayout) component;
  11. }
  12. else{
  13. dl =(DirectionalLayout)LayoutScatter.getInstance(as).parse(ResourceTable.Layout_itemview,null,false);
  14. }
  15. //获取数据
  16. Item item = list.get(i);
  17. //将布局中的text拿出
  18. Text text = (Text) dl.findComponentById(ResourceTable.Id_itemtext);
  19. //设置文本内容
  20. text.setText(item.getText());
  21. //返回该布局,布局包裹了text
  22. return dl;
  23. }

Picker滑动选择器组件

文本分为

未被选择的文本

  • ohos:normal_text_size=""
  • ohos:normal_text_color=""

已被选择的文本

  • ohos:selected_text_size=""
  • ohos:selected_text_color=""

选择的值范围(默认0~9)

  • ohos:max_value=""
  • ohos:min_value=""

默认选择的值

  • ohos:value=""

着色器:向中间渐变

  • ohos:shader_color=""
  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. <Picker
  9. ohos:id="$+id:picker"
  10. ohos:height="match_content"
  11. ohos:width="100vp"
  12. ohos:normal_text_size="20fp"
  13. ohos:selected_text_size="20fp"
  14. ohos:normal_text_color="#21a8fd"
  15. ohos:selected_text_color="#FF0000"
  16. ohos:max_value="6"
  17. ohos:min_value="0"
  18. ohos:value="3"
  19. />
  20. </DirectionalLayout>

 

  1. package com.example.myapplication.slice;
  2. import com.example.myapplication.ResourceTable;
  3. import ohos.aafwk.ability.AbilitySlice;
  4. import ohos.aafwk.content.Intent;
  5. import ohos.agp.components.Picker;
  6. import java.util.ArrayList;
  7. public class MainAbilitySlice extends AbilitySlice {
  8. @Override
  9. public void onStart(Intent intent) {
  10. super.onStart(intent);
  11. super.setUIContent(ResourceTable.Layout_ability_main);
  12. Picker picker = (Picker)findComponentById(ResourceTable.Id_picker);
  13. ArrayList<String> list = new ArrayList<>();
  14. list.add("星期一");
  15. list.add("星期二");
  16. list.add("星期三");
  17. list.add("星期四");
  18. list.add("星期五");
  19. list.add("星期六");
  20. list.add("星期日");
  21. picker.setFormatter(
  22. (int i) -> {
  23. //i表示要展示的数字
  24. //返回的就是要展示的内容
  25. return list.get(i);
  26. }
  27. );
  28. }
  29. @Override
  30. public void onActive() {
  31. super.onActive();
  32. }
  33. @Override
  34. public void onForeground(Intent intent) {
  35. super.onForeground(intent);
  36. }
  37. }

省-市 联动的滑动选择

  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="horizontal">
  8. <Picker
  9. ohos:id="$+id:province"
  10. ohos:height="match_content"
  11. ohos:width="100vp"
  12. ohos:normal_text_size="20fp"
  13. ohos:selected_text_size="20fp"
  14. ohos:value="0"/>
  15. <Picker
  16. ohos:id="$+id:city"
  17. ohos:height="match_content"
  18. ohos:width="100vp"
  19. ohos:normal_text_size="20fp"
  20. ohos:selected_text_size="20fp"
  21. ohos:left_margin="10vp"
  22. ohos:value="0"/>
  23. </DirectionalLayout>

准备一个Javabean

 

  1. package com.example.myapplication.domain;
  2. import java.util.ArrayList;
  3. public class Province {
  4. private String name;
  5. private ArrayList<String> list;
  6. public Province(){}
  7. public Province(String name,ArrayList<String> list){
  8. this.name = name;
  9. this.list = list;
  10. }
  11. public String getName(){
  12. return name;
  13. }
  14. public ArrayList<String> getList(){ return list; }
  15. public void setName(String name){
  16. this.name = name;
  17. }
  18. public void setList(ArrayList<String> list){
  19. this.list = list;
  20. }
  21. }

然后修改mainabilityslice

  1. package com.example.myapplication.slice;
  2. import com.example.myapplication.ResourceTable;
  3. import ohos.aafwk.ability.AbilitySlice;
  4. import ohos.aafwk.content.Intent;
  5. import com.example.myapplication.domain.Province;
  6. import ohos.agp.components.Picker;
  7. import java.util.ArrayList;
  8. public class MainAbilitySlice extends AbilitySlice implements Picker.ValueChangedListener {
  9. Picker province;
  10. Picker city;
  11. ArrayList<Province> provincesList;
  12. @Override
  13. public void onStart(Intent intent) {
  14. super.onStart(intent);
  15. super.setUIContent(ResourceTable.Layout_ability_main);
  16. province = (Picker)findComponentById(ResourceTable.Id_province);
  17. city = (Picker)findComponentById(ResourceTable.Id_city);
  18. provincesList = getData();
  19. //最大值最小值要在setFormatter前设置
  20. province.setMinValue(0);
  21. province.setMaxValue(provincesList.size()-1);
  22. province.setFormatter(i->provincesList.get(i).getName());
  23. city.setMinValue(0);
  24. city.setMaxValue(provincesList.get(0).getList().size()-1);
  25. city.setFormatter(i->provincesList.get(0).getList().get(i));
  26. province.setValueChangedListener(this);
  27. }
  28. public ArrayList<Province> getData(){
  29. ArrayList<Province> provinceList = new ArrayList<>();
  30. //江苏省的市的集合
  31. ArrayList<String> jiangSuCities = new ArrayList<>();
  32. jiangSuCities.add("南京市");
  33. jiangSuCities.add("苏州市");
  34. jiangSuCities.add("扬州市");
  35. jiangSuCities.add("徐州市");
  36. jiangSuCities.add("无锡市");
  37. //四川省的是的集合
  38. ArrayList<String> siChuanCities = new ArrayList<>();
  39. siChuanCities.add("成都市");
  40. siChuanCities.add("绵阳市");
  41. siChuanCities.add("绵阳市");
  42. siChuanCities.add("绵阳市");
  43. //添加省
  44. provinceList.add(new Province("江苏省",jiangSuCities));
  45. provinceList.add(new Province("四川省",siChuanCities));
  46. return provinceList;
  47. }
  48. @Override
  49. public void onActive() {
  50. super.onActive();
  51. }
  52. @Override
  53. public void onForeground(Intent intent) {
  54. super.onForeground(intent);
  55. }
  56. @Override
  57. //当前改变的滑动选择七对象
  58. //旧值,之前的值
  59. //新值,现在的值
  60. public void onValueChanged(Picker picker, int i, int i1) {
  61. if(picker==province){
  62. Province choosedProvince = provincesList.get(i1);
  63. city.setMaxValue(choosedProvince.getList().size()-1);
  64. city.setFormatter(x->choosedProvince.getList().get(x));
  65. //设置城市默认选中
  66. city.setValue(0);
  67. }
  68. }
  69. }

时间滑动选择器组件

DatePicker

  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. <DatePicker
  9. ohos:id="$+id:datepicker"
  10. ohos:height="match_content"
  11. ohos:width="300vp"
  12. ohos:normal_text_size="20fp"
  13. ohos:selected_text_size="20fp"/>
  14. <Text
  15. ohos:id="$+id:text"
  16. ohos:height="40vp"
  17. ohos:width="300vp"
  18. ohos:text_size="35fp"/>
  19. </DirectionalLayout>
  1. package com.example.myapplication.slice;
  2. import com.example.myapplication.ResourceTable;
  3. import ohos.aafwk.ability.AbilitySlice;
  4. import ohos.aafwk.content.Intent;
  5. import ohos.agp.components.DatePicker;
  6. import ohos.agp.components.Text;
  7. public class MainAbilitySlice extends AbilitySlice implements DatePicker.ValueChangedListener {
  8. Text text;
  9. @Override
  10. public void onStart(Intent intent) {
  11. super.onStart(intent);
  12. super.setUIContent(ResourceTable.Layout_ability_main);
  13. text = (Text)findComponentById(ResourceTable.Id_text);
  14. DatePicker datePicker = (DatePicker)findComponentById(ResourceTable.Id_datepicker);
  15. datePicker.setValueChangedListener(this);
  16. }
  17. @Override
  18. public void onActive() {
  19. super.onActive();
  20. }
  21. @Override
  22. public void onForeground(Intent intent) {
  23. super.onForeground(intent);
  24. }
  25. //值改变的datePicker
  26. //年,月,日
  27. @Override
  28. public void onValueChanged(DatePicker datePicker, int i, int i1, int i2) {
  29. text.setText(i+"年"+i1+"月"+i2+"日");
  30. }
  31. }

TimePicker

用法一模一样

  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. <TimePicker
  9. ohos:id="$+id:timepicker"
  10. ohos:height="match_content"
  11. ohos:width="300vp"
  12. ohos:normal_text_size="20fp"
  13. ohos:selected_text_size="20fp"/>
  14. <Text
  15. ohos:id="$+id:text"
  16. ohos:height="40vp"
  17. ohos:width="300vp"
  18. ohos:text_size="35fp"/>
  19. </DirectionalLayout>
  1. package com.example.myapplication.slice;
  2. import com.example.myapplication.ResourceTable;
  3. import ohos.aafwk.ability.AbilitySlice;
  4. import ohos.aafwk.content.Intent;
  5. import ohos.agp.components.Text;
  6. import ohos.agp.components.TimePicker;
  7. public class MainAbilitySlice extends AbilitySlice implements TimePicker.TimeChangedListener {
  8. Text text;
  9. @Override
  10. public void onStart(Intent intent) {
  11. super.onStart(intent);
  12. super.setUIContent(ResourceTable.Layout_ability_main);
  13. text = (Text)findComponentById(ResourceTable.Id_text);
  14. TimePicker timePicker = (TimePicker)findComponentById(ResourceTable.Id_timepicker);
  15. timePicker.setTimeChangedListener(this);
  16. }
  17. @Override
  18. public void onActive() {
  19. super.onActive();
  20. }
  21. @Override
  22. public void onForeground(Intent intent) {
  23. super.onForeground(intent);
  24. }
  25. @Override
  26. public void onTimeChanged(TimePicker timePicker, int i, int i1, int i2) {
  27. text.setText(i+"时"+i1+"分"+i2+"秒");
  28. }
  29. }

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/知新_RL/article/detail/222172
推荐阅读
相关标签
  

闽ICP备14008679号