Harmony2.0开发—组件
常见组件
屏幕展示出来的元素,都称之为组件。比如华为已经提供的:文本,图片,进度条,输入框等。
组件的顶级父类:Component
组件分类
- 显示类组件 只负责数据展示的,无法跟用户交互,比如展示文本的组件,展示图片的组件。
- 交互类组件 可以跟用户交互的,比如用户可以点击的按钮组件,用户可以输入的文本框组件。
- 布局类组件 布局其实也是一种比较特殊的组件。
显示类组件
文本Text、图片Image、CommonDialog普通弹框组件、ToastDialog信息提示组件、时钟Clock、定时器 TickTimer、进度条ProgressBar等。。。
Text文本组件
- 作用:数据展示
常用属性:
长度单位:px,vp,fp。
如果不写单位,默认单位是px
vp(虚拟像素)长度单位。1vp=3px
fp字体大小单位。
跑马灯效果:
// 跑马灯效果
text.setTruncationMode(Text.TruncationMode.AUTO_SCROLLING);
// 始终处于自动滚动状态
text.setAutoScrollingCount(Text.AUTO_SCROLLING_FOREVER);
// 启动跑马灯效果
text.startAutoScrolling();
Image图片组件
- 作用:显示图片
图片存放路径再media文件夹下
图片剪切显示:
- 代码中:可以用setClipGravity方法
- xml文件中:可以用clip_alignment属性
- 上、下、左、右、居中
- 表示分别按照上、下、左、右、中间部位进行剪切。
图片缩放显示:
- 代码中:可以用setScaleMode方法
- xml文件中:可以用scale_mode属性
- inside:表示将原图按比例缩放到与Image相同或更小的尺寸,并居中显示。 有可能不会填充组件
- center:表示不缩放,按Image大小显示原图中间部分。
- stretch:表示将原图缩放到与Image大小一致。 拉伸。将组件填充。
- clip_center:表示将原图按比例缩放到与Image相同或更大的尺寸,并居中显示。超过组件的部分被剪 切掉。
- zoom_center:表示原图按照比例缩放到与Image最窄边一致,并居中显示。
- zoom_end:表示原图按照比例缩放到与Image最窄边一致,并靠结束端显示。
- zoom_start:表示原图按照比例缩放到与Image最窄边一致,并靠起始端显示。
CommonDialog普通弹框组件
使用默认布局的基本用法
//把普通弹框弹出来就可以了
//1.创建弹框的对象
//this:当前弹框是哪展示在当前的界面中的。
CommonDialog cd = new CommonDialog(this);
//2.因为弹框里面是有默认布局的
//设置标题
cd.setTitleText("系统定位服务已关闭");
//设置内容
cd.setContentText("请打开定位服务,以便司机师傅能够准确接您上车");
//自动关闭
cd.setAutoClosable(true);
//设置按钮
//参数一:按钮的索引 0 1 2
//参数二:按钮上的文字
//参数三:点击了按钮之后能做什么
cd.setButton(0, "设置", new IDialog.ClickedListener() {
@Override
public void onClick(IDialog iDialog, int i) {
//写上点击了设置之后,要做的事情。
//如果点击之后我不需要做任何事情,在第三个参数中传递null就可以了。
}
});
cd.setButton(1, "取消", new IDialog.ClickedListener() {
@Override
public void onClick(IDialog iDialog, int i) {
//销毁弹框
cd.destroy();
}
});
//把弹框显示出来
cd.show();
}
自定义弹框布局
新建弹窗布局文件,文件名: message_dialog.xml。如果需要更复杂的弹框,只要丰富xml文件中的组件即可。
<?xml version="1.0" encoding="utf-8"?>
<DirectionalLayout
xmlns:ohos="http://schemas.huawei.com/res/ohos"
ohos:height="match_content"
ohos:width="match_content"
ohos:orientation="vertical">
<Text
ohos:id="$ id:message"
ohos:height="match_content"
ohos:width="match_content"
ohos:text_size="40fp"/>
<Button
ohos:id="$ id:submit"
ohos:height="match_content"
ohos:width="match_content"
ohos:background_element="#21a896"
ohos:text="确定"
ohos:text_size="40fp"/>
<Button
ohos:id="$ id:cancel"
ohos:height="match_content"
ohos:width="match_content"
ohos:background_element="#0021D9"
ohos:text="取消"
ohos:text_size="40fp"
ohos:top_margin="10vp"
/>
</DirectionalLayout>
java类:
import com.roydon.myapplication1.ResourceTable;
import ohos.aafwk.ability.AbilitySlice;
import ohos.aafwk.content.Intent;
import ohos.agp.components.*;
import ohos.agp.window.dialog.CommonDialog;
public class MainAbilitySlice extends AbilitySlice {
@Override
public void onStart(Intent intent) {
super.onStart(intent);
super.setUIContent(ResourceTable.Layout_ability_main);
//创建一个弹框对象
CommonDialog cd = new CommonDialog(this);
cd.setCornerRadius(30);//设置弹窗圆角
//把messagedislog的xml文件加载到内存当中。交给弹框并展示出来。
//加载xml文件并获得一个布局对象
//parse方法:加载一个xml文件,返回一个布局对象。
//参数一:要加载的xml文件
//参数二:该xml文件是否跟其他xml文件有关。如果无关是独立的,就写null就可以了
//参数三:如果文件是独立的,那么直接写false
DirectionalLayout dl = (DirectionalLayout) LayoutScatter.getInstance(this).parse(ResourceTable.Layout_message_dialog, null, false);
Text title = (Text) dl.findComponentById(ResourceTable.Id_message);
Button submit = (Button) dl.findComponentById(ResourceTable.Id_submit);
Button cancel = (Button) dl.findComponentById(ResourceTable.Id_cancel);
title.setText("msg");
//给两个按钮添加单击事件
submit.setClickedListener(new Component.ClickedListener() {
@Override
public void onClick(Component component) {
title.setText("点击了确定按钮");
}
});
cancel.setClickedListener(new Component.ClickedListener() {
@Override
public void onClick(Component component) {
//当点击了取消按钮之后,把弹框给关闭
cd.destroy();
}
});
//此时布局对象跟弹框还没有任何关系.还需要把布局对象交给弹框才可以
cd.setContentCustomComponent(dl);
//让弹框展示出来
cd.show();
}
@Override
public void onActive() {
super.onActive();
}
@Override
public void onForeground(Intent intent) {
super.onForeground(intent);
}
}
封装成工具类
import com.roydon.myapplication1.ResourceTable;
import ohos.agp.components.*;
import ohos.agp.window.dialog.CommonDialog;
import ohos.app.Context;
public class MyDialog {
public static void showDialog(Context context, String msg) {
CommonDialog cd = new CommonDialog(context);
cd.setCornerRadius(30);
DirectionalLayout dl = (DirectionalLayout) LayoutScatter.getInstance(context).parse(ResourceTable.Layout_message_dialog, null, false);
Text title = (Text) dl.findComponentById(ResourceTable.Id_message);
Button submit = (Button) dl.findComponentById(ResourceTable.Id_submit);
Button cancel = (Button) dl.findComponentById(ResourceTable.Id_cancel);
title.setText(msg);
submit.setClickedListener(new Component.ClickedListener() {
@Override
public void onClick(Component component) {
title.setText("点击了确定按钮");
}
});
cancel.setClickedListener(new Component.ClickedListener() {
@Override
public void onClick(Component component) {
cd.destroy();
}
});
cd.setContentCustomComponent(dl);
cd.show();
}
}
ToastDialog信息提示组件
也叫做吐司弹框。就是一个小提示而已。 ToastDialog是CommonDialog的子类,所以具备CommonDialog相关的特性。 也包含了标题,内容还有选择按钮。 一般来讲,吐司弹框我们只用中间的内容部分,因为他出现的意义就是为了提示信息的。
基本使用:
ToastDialog t = new ToastDialog(this);
t.setText("要显示的内容")
t.setAlignment(LayoutAlignment.CENTER);
t.show();
相关设置:
ToastDialog toastDialog = new ToastDialog(this);
//设置的大小。如果不写,默认包裹内容
toastDialog.setSize(DirectionalLayout.LayoutConfig.MATCH_CONTENT,
DirectionalLayout.LayoutConfig.MATCH_CONTENT);
//设置持续时间。如果不写,默认2秒
toastDialog.setDuration(2000);
//设置自动关闭。如果不写,就是自动关闭
toastDialog.setAutoClosable(true);
//设置位置。如果不写,默认居中
toastDialog.setAlignment(LayoutAlignment.CENTER);
//设置提示信息内容
toastDialog.setText("要显示的内容");
//让吐司展示出来
toastDialog.show();
自定义布局和抽取工具类:
布局xml文件命名为mytoast.xml
<?xml version="1.0" encoding="utf-8"?>
<DirectionalLayout
xmlns:ohos="http://schemas.huawei.com/res/ohos"
ohos:height="match_content"
ohos:width="match_content"
ohos:orientation="vertical">
<Text
ohos:id="$ id:msg"
ohos:height="match_content"
ohos:width="match_content"
ohos:text_size="16fp"
ohos:text_color="#FFFFFF"
ohos:text_alignment="center"
ohos:padding="20vp"
ohos:margin="30vp"
ohos:multiple_lines="true"
ohos:background_element="#FF5B3535"/>
</DirectionalLayout>
工具类:
import com.roydon.myapplication1.ResourceTable;
import ohos.agp.components.DirectionalLayout;
import ohos.agp.components.LayoutScatter;
import ohos.agp.utils.LayoutAlignment;
import ohos.agp.window.dialog.ToastDialog;
import ohos.app.Context;
public class MyToast {
public static void showDialog(Context context, String msg) {
//加载xml布局文件
DirectionalLayout dl = (DirectionalLayout) LayoutScatter.getInstance(context).parse(ResourceTable.Layout_mytoast, null, false);
ToastDialog td = new ToastDialog(context);
td.setSize(DirectionalLayout.LayoutConfig.MATCH_CONTENT, DirectionalLayout.LayoutConfig.MATCH_CONTENT);
td.setDuration(2000);//设置出现的时间
td.setAutoClosable(true);//设置自动关闭
td.setAlignment(LayoutAlignment.BOTTOM);//对其方式
td.setText(msg);
td.show();
}
}
Clock时钟组件
是Text的子类,所以可以使用Text的一些属性。
常用属性:
常用方法:
指定12小时展示格式:clock.setFormatIn12HourMode("yyyy年MM月dd日 hh:mm:ss a");
指定24小时展示格式:clock.setFormatIn24HourMode("yyyy年MM月dd日 HH:mm:ss");
拓展:
//将字符串表示的时间(2021-01-01 11:11:11)转成毫秒值
public static String dateToTimeStamp(String s) throws ParseException{
SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
Date date = simpleDateFormat.parse(s);
long ts = date.getTime();
String res = String.valueOf(ts);
return res;
}
//将时间的毫秒值转换为时间
public static String timeStampToDate(String s){
SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
long lt = new Long(s);
Date date = new Date(lt);
String res = simpleDateFormat.format(date);
return res;
}
TickTimer定时器组件
是Text的子类,所以可以使用Text的一些属性。
<TickTimer
ohos:id="$ id:my_tt"
ohos:height="60vp"
ohos:width="250vp"
ohos:padding="10vp"
ohos:text_size="20fp"
ohos:text_color="#ffffff"
ohos:background_element="#0000ff"
ohos:text_alignment="center"
ohos:layout_alignment="horizontal_center"
ohos:top_margin="50vp" />
//没有设置时间,默认是从1970年1月1日开始。
ProgressBar进度条组件
.getProgress();
//获取进度条里面原本的值.setProgressValue(progress);
//设置进度值.setProgressHintText(progress "%");
//修改提示文字进度
<ProgressBar
ohos:id="$ id:pb"
ohos:height="match_content"
ohos:width="300vp"
ohos:progress="0"
ohos:progress_hint_text="0%"
ohos:progress_hint_text_color="#000000"
ohos:progress_width="50vp"
ohos:progress_color="#FF0000"
ohos:max="100"
ohos:min="0"/>
RoundProgressBar
是ProgressBar的子类,用法跟ProgressBar一模一样,只是显示的方式不一样。
<RoundProgressBar
ohos:height="300vp"
ohos:width="300vp"
ohos:progress_hint_text="80%"
ohos:progress_hint_text_size="50vp"
ohos:progress_hint_text_color="#000000"
ohos:progress="80"
ohos:progress_width="20vp"
ohos:progress_color="#FF0000"
ohos:max="100"
ohos:min="0"/>
交互类组件
TextField文本输入框组件
是Text的子类,用来进行用户输入数据的。
将文本框中的密码变成明文:textField.setTextInputType(InputAttribute.PATTERN_NULL);
将文本框中的密码变回密文:textField.setTextInputType(InputAttribute.PATTERN_PASSWORD);
取消按钮设置位置:
int x = r.nextInt(500);
int y = r.nextInt(1000);
cacel.setTranslation(x,y);
<TextField
ohos:id="$ id:text"
ohos:height="50vp"
ohos:width="319vp"
ohos:background_element="#FFFFFF"
ohos:hint="请输入信息"
ohos:hint_color="#999999"
ohos:layout_alignment="horizontal_center"
ohos:text_alignment="center"
ohos:text_size="17fp"
ohos:top_margin="100vp"/>
Checkbox多选框组件
父类是AbsButton,而AbsButton的父类是Button。 当我们需要同时选择多个元素的时候就需要用到多选框组件。
比如:发送图片的时候需要多选,注册的时候选择爱好也需要多选等。
可以给多选框添加一个状态监听事件 checkbox.setCheckedStateChangedListener(this);
public class MainAbilitySlice extends AbilitySlice implements AbsButton.CheckedStateChangedListener
//当多选框的状态被改变之后,就会调用这个方法
//参数一:absButton就表示状态被改变的那个多选框
//参数二:表示当前多选框的状态,true选中 false 未选中
@Override
public void onCheckedChanged(AbsButton absButton, boolean b) {
if(b){
ToastUtils.showDialog(this,"被选中");
}else{
ToastUtils.showDialog(this,"未被选中");
}
}
RadioButton单选框组件
父类是AbsButton,而AbsButton的父类是Button。在使用的时候需要用到单选按钮的按钮组。 RadioContainer,在一组内多选按钮只能选择其中一个。
当需要监听单选框的状态时,不要用AbsButton里面的CheckedStateChangedListener。而是给按钮组 RadioContainer添加事件。用RadioContainer里面的CheckedStateChangedListener。
按钮组RadioContainer常见方法:.setMarkChangedListener () //添加状态监听事件,可以监听按钮组里面单选按钮的状态是否改变
public class MainAbilitySlice extends AbilitySlice implements RadioContainer.CheckedStateChangedListener
<RadioContainer
ohos:id="$ id:rc"
ohos:height="match_content"
ohos:width="match_content">
<RadioButton
ohos:id="$ id:boy"
ohos:height="match_content"
ohos:width="match_content"
ohos:background_element="#21a8fd"
ohos:marked="false"
ohos:text="男"
ohos:text_alignment="center"
ohos:text_size="30fp"
/>
<RadioButton
ohos:id="$ id:girl"
ohos:height="match_content"
ohos:width="match_content"
ohos:background_element="#21a8fd"
ohos:marked="false"
ohos:text="女"
ohos:text_alignment="center"
ohos:text_size="30fp"
ohos:top_margin="10vp"/>
</RadioContainer>
RadioContainer rc = (RadioContainer) findComponentById(ResourceTable.Id_rc);
rc.setMarkChangedListener(this);
//当按钮组里面的按钮状态发生改变的时候,就会触发下面的方法
//参数一:单选框按钮组的对象
//参数二:索引,表示当前状态改变的是该按钮组中第几个按钮
@Override
public void onCheckedChanged(RadioContainer radioContainer, int i) {
RadioButton rb = (RadioButton) radioContainer.getComponentAt(i);
String text = rb.getText();
if(rb.isChecked()){
ToastUtils.showDialog(this,text "被选中了");
}else{
ToastUtils.showDialog(this,text "被取消选中了");
}
}
Switch组件
滑道背景 ohos:track_element=“#FF0000”
滑块颜色 ohos:thumb_element=“#07C160”
<Switch
ohos:id="$ id:choose"
ohos:height="40vp"
ohos:width="100vp"
ohos:text_state_on="开"
ohos:text_state_off="关"
ohos:text_size="20vp"
/>
监听状态改变:
public class MainAbilitySlice extends AbilitySlice implements AbsButton.CheckedStateChangedListener
Switch choose = (Switch) findComponentById(ResourceTable.Id_choose);
choose.setCheckedStateChangedListener(this);
//当开关组件状态发生改变的时候,那么就会调用这个方法
//参数一:表示状态改变的那个开关组件
//参数二:表示组件当前的状态
@Override
public void onCheckedChanged(AbsButton absButton, boolean b) {
if(b){
//ToastUtils.showDialog(this,"开关开启了");
//可以打开某个设置
}else{
//ToastUtils.showDialog(this,"开关关闭了");
//可以关闭某个设置
}
}
Slider滑块组件
<Slider
ohos:height="50vp"
ohos:width="300vp"
进度颜色,左边的
ohos:progress_color="#FF0000"
滑块颜色
ohos:thumb_element="#00FF00"
未完成进度颜色
ohos:background_instruct_element="#0000FF"
次一级的进度值
ohos:vice_progress="80"
次一级的进度颜色
ohos:vice_progress_element="#923456"
是否允许用户操作滑块
ohos:enabled="true"
max = "100"
min = "0"
/>
事件:ValueChangedListener(值改变事件)
接口中的方法:
①:onProgressUpdated(参数一,参数二,参数三) 当滑块组件中的值改变的时候,调用该方法。
参数一:滑块对象
参数二:当前进度值
参数三:当前滑块组件是否可以调节进度
②:onTouchStart 按上滑块的时候触发
③:onTouchend 离开滑块的时候触发
public class MainAbilitySlice extends AbilitySlice implements Slider.ValueChangedListener
Slider slider = (Slider) findComponentById(ResourceTable.Id_slider);
slider.setValueChangedListener(this);
//当滑块组件中的进度值改变的时候,就会调用这个方法
//参数一:滑块组件对象
//参数二:当前的进度值
//参数三:当前滑块是否可以被滑动
@Override
public void onProgressUpdated(Slider slider, int i, boolean b) {
ToastUtils.showDialog(this,"当前的进度值为:" i);
}
//当用户用鼠标或者用手指
//按下滑块不松的时候,会调用该方法
@Override
public void onTouchStart(Slider slider) {
ToastUtils.showDialog(this,"按下不松");
}
//松开滑块的时候,会调用该方法。
@Override
public void onTouchEnd(Slider slider) {
ToastUtils.showDialog(this,"松开");
}
ListContainer
ListContainer是一个列表容器类组件。在这里的每一行,我们都可以看做是一个item。如下图所示,包裹了所有 item的红色的容器,就是ListContainer
注意细节:
① 每一行其实就是一个独立的item。
② 在屏幕的上面和下面,还有很多没有展示出来的item。 当我们用手指往上滑动的时候,就可以到下面的item。 当我们用手指往下滑动的时候,就可以到上面的item。 只不过划出屏幕的item会被销毁,而没有划入屏幕的item 还没有创建出来。
③ 如果item过多,在内存会有垃圾。这个问题下面学习。
<ListContainer
ohos:id="$ id:listcontainer"
ohos:height="match_parent"
ohos:width="match_parent"
ohos:layout_alignment="horizontal_center"/>
实现步骤:
- 给item去指定一个布局xml文件
<?xml version="1.0" encoding="utf-8"?>
<DirectionalLayout
xmlns:ohos="http://schemas.huawei.com/res/ohos"
ohos:height="match_content"
ohos:width="match_content"
ohos:orientation="horizontal">
<Text
ohos:id="$ id:text"
ohos:height="match_content"
ohos:width="match_content"
ohos:text="00:00"
ohos:text_size="20fp"/>
</DirectionalLayout>
- 书写一个javabean类表示item
public class Item {
//记录的值就是赋值给item里面的text
private String text;
public Item() {}
public Item(String text) {
this.text = text;
}
public String getText() {
return text;
}
public void setText(String text) {
this.text = text;
}
}
- 写一个适配器类去管理item
import com.roydon.listcontainerdemo1.ResourceTable;
import com.roydon.listcontainerdemo1.bean.Item;
import ohos.aafwk.ability.AbilitySlice;
import ohos.agp.components.*;
import java.util.ArrayList;
public class ItemProvider extends BaseItemProvider {
private ArrayList<Item> list;
private AbilitySlice as;
public ItemProvider(ArrayList<Item> list, AbilitySlice as) {
this.list = list;
this.as = as;
}
public ArrayList<Item> getList() {
return list;
}
public void setList(ArrayList<Item> list) {
this.list = list;
}
public AbilitySlice getAs() {
return as;
}
public void setAs(AbilitySlice as) {
this.as = as;
}
@Override
public int getCount() {
return list.size();
}
@Override
public Object getItem(int i) {
if (list != null && i >= 0 && i < list.size()) {
return list.get(i);
}
return null;
}
@Override
public long getItemId(int i) {
return i;
}
@Override
public Component getComponent(int i, Component component, ComponentContainer componentContainer) {
DirectionalLayout dl;
if (component != null) {
// 优化
dl = (DirectionalLayout) component;
} else {
dl = (DirectionalLayout) LayoutScatter.getInstance(as).parse(ResourceTable.Layout_list_item, null, false);
}
Text text = (Text) dl.findComponentById(ResourceTable.Id_text);
text.setText(list.get(i).getText());
return dl;
}
}
- 将适配器交给ListContainer
import com.roydon.listcontainerdemo1.ResourceTable;
import com.roydon.listcontainerdemo1.bean.Item;
import com.roydon.listcontainerdemo1.provider.ItemProvider;
import ohos.aafwk.ability.AbilitySlice;
import ohos.aafwk.content.Intent;
import ohos.agp.components.ListContainer;
import java.util.ArrayList;
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_listContainer);
//1.数据传给item视图
ItemProvider itemProvider = new ItemProvider(getData(), this);
//2.item视图传到ListContainer
listContainer.setItemProvider(itemProvider);
}
@Override
public void onActive() {
super.onActive();
}
@Override
public void onForeground(Intent intent) {
super.onForeground(intent);
}
public ArrayList<Item> getData() {
ArrayList<Item> list = new ArrayList<>();
for (int i = 0; i < 50; i ) {
list.add(new Item("item-->" i));
}
return list;
}
}
案例:微信消息
Picker
picker是滑动选择器组件。在一些app中选择地址的时候会用到,但是一般是三个picker选择器组合在一起使用。 如图所示:
案例:选择今天星期几
<Picker
ohos:id="$ id:picker"
ohos:height="match_content"
ohos:width="100vp"
ohos:max_value="6"
ohos:min_value="0"
ohos:normal_text_color="#21a8fd"
ohos:normal_text_size="20fp"
ohos:selected_text_color="#FF0000"
ohos:selected_text_size="20fp"
ohos:shader_color="pink"
ohos:value="0"
/>
Picker picker = (Picker) findComponentById(ResourceTable.Id_picker);
//把要展示的内容全部放在集合中
ArrayList<String> list = new ArrayList<>();
list.add("星期一");
list.add("星期二");
list.add("星期三");
list.add("星期四");
list.add("星期五");
list.add("星期六");
list.add("星期日");
//设置内容
picker.setFormatter(list::get)
Picker联动时
public class MainAbilitySlice extends AbilitySlice implements Picker.ValueChangedListener
//参数一:表示当前数据变动的那个滑动选择器对象
//参数二:表示旧值 (原来选中的值)
//参数三:表示新值(现在选中的值)
@Override
public void onValueChanged(Picker picker, int oldValue, int newValue) {
if (picker == province) {
Province chooseProvince = provinceList.get(newValue);//获取当前省份
city.setMaxValue(chooseProvince.getList().size() - 1);
city.setFormatter(i -> chooseProvince.getList().get(i));
city.setValue(0);//当前面更换省份的时候,中间的城市需要从第一个开始展示
}
}
案例:省市区三级联动
https://blog.csdn.net/m0_51390535/article/details/127040350
DatePicker和TimePicker
DatePicker和TimePicker都是时间选择器。
DatePicker:表示年月日
TimePicker:表示时分秒
<DatePicker
ohos:id="$ id:datepicker"
ohos:height="match_content"
ohos:width="300vp"
ohos:normal_text_size="20fp"
ohos:selected_text_size="20fp"/>
<TimePicker
ohos:id="$ id:timepicker"
ohos:height="match_content"
ohos:width="300vp"
ohos:normal_text_size="20fp"
ohos:selected_text_size="20fp"/>
DatePicker监听:
public class MainAbilitySlice extends AbilitySlice implements DatePicker.ValueChangedListener
DatePicker datePicker = (DatePicker) findComponentById(ResourceTable.Id_datepicker);
datePicker.setValueChangedListener(this);
@Override
public void onValueChanged(DatePicker datePicker, int year, int month, int day) {
text.setText(year "年" month "月" day "日");
}
TimePicker监听:
TimePicker timePicker = (TimePicker) findComponentById(ResourceTable.Id_timepicker);
timePicker.setTimeChangedListener(new TimePicker.TimeChangedListener() {
@Override
public void onTimeChanged(TimePicker timePicker, int hour, int minutes, int second) {
text.setText("时间为:" hour minutes second);
}
});
这篇好文章是转载于:学新通技术网
- 版权申明: 本站部分内容来自互联网,仅供学习及演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,请提供相关证据及您的身份证明,我们将在收到邮件后48小时内删除。
- 本站站名: 学新通技术网
- 本文地址: /boutique/detail/tanhgaegcc
-
photoshop保存的图片太大微信发不了怎么办
PHP中文网 06-15 -
《学习通》视频自动暂停处理方法
HelloWorld317 07-05 -
word里面弄一个表格后上面的标题会跑到下面怎么办
PHP中文网 06-20 -
Android 11 保存文件到外部存储,并分享文件
Luke 10-12 -
photoshop扩展功能面板显示灰色怎么办
PHP中文网 06-14 -
微信公众号没有声音提示怎么办
PHP中文网 03-31 -
excel下划线不显示怎么办
PHP中文网 06-23 -
excel打印预览压线压字怎么办
PHP中文网 06-22 -
TikTok加速器哪个好免费的TK加速器推荐
TK小达人 10-01 -
怎样阻止微信小程序自动打开
PHP中文网 06-13