第5 章
UI 组 件 
本章主要讲解常见UI组件的使用方法及其特性。第4章中介绍了HarmonyOS的常
用UI布局,而一个界面除了UI布局,组件也是非常重要的组成部分。组件是构建页面的
核心,每个组件通过对数据和方法的简单封装,实现独立的可视、可交互功能单元。组件之
间相互独立,随取随用,也可以在需求相同的地方重复使用。HarmonyOS的UI常见组件
可以分为三大类:显示组件、交互组件和高级组件。组件的具体使用场景,需要根据业务需
求来选择使用。
通过阅读本章,读者可以掌握: 
如何创建使用各类组件。
了解各类组件所支持的属性。
如何设置组件样式。
5.1 展示组件
5.1.1 文本组件 
文本组件(Text)是最常用的组件之一。Text是用来显示字符串的组件,在界面上显示
为一块文本区域。Text作为一个基本组件有很多扩展,常见的有按钮组件Button,文本编
辑组件TextField。Text是Component类的子类之一,所以它能够使用Component类的所
有公开的属性和方法,Text类自身也提供了一些特殊的属性、方法、内部类和接口。
1.创建Text 
(1)布局文件中创建Text。
在layout文件下创建text.xml,在XML文件中声明布局和组件。例如,创建一个高为
150vp,长为300vp的text组件,组件具体属性代码如下: 
<Text 
ohos:id="$+id:text" //当前组件唯一标识,在单个布局文件中不允许id 标识重复 
ohos:width="300vp" 
ohos:height="150vp" 
ohos:text="Text 组件" //显示文本 
ohos:background_element="$graphic:background_text" //设置Text 背景 
ohos:text_size="66fp" 
ohos:text_color="white" 
ohos:italic="true"

第5 章 UI 组件 89 
ohos:text_weight="700" 
ohos:text_font="serif" 
/> 
组件常用的背景可以采用XML格式放置在graphic目录下。在graphic目录下创建
background_text.xml,在XML文件中定义文本的背景,代码如下: 
<?xml version="1.0" encoding="utf-8"?> 
<shape xmlns:ohos="http://schemas.huawei.com/res/ohos" 
ohos:shape="rectangle"> 
<corners ohos:radius="20"/> 
<solid ohos:color="#FF1992C3"/> 
</shape> 
最后,在MainAbilitySlice.java中,通过setUIContent()加载该XML布局。代码如下: 
public class MainAbilitySlice extends AbilitySlice { 
@Override 
public void onStart (Intent intent){ 
Super.onStart(intent); 
Super.setUIContent(ResourceTable.Layout_text); 
} 
}
运行效果如图5-1所示。
图5-1 XML创建Text 
(2)Java代码中创建Text。
打开MainAbilitySlice.java文件,找到onStart()方法,创建Text组件,代码如下:

90 HarmonyOS 应用程序开发与实战(Java 版) 
Text text = (Text) findComponentById 
(ResourceTable.Id_text); //获取布局中的组件
text.setText("text 组件"); //设置文本
text.setTextSize(66); //设置文字大小
text.setTextColor(Color.WHITE); //设置文字颜色
text.setWidth(300); 
text.setHeight(150); 
2.设置Text组件样式
(1)设置字体大小和颜色。
通常设置文本大小text_size和文本颜色text_color两个属性。text_size为float类型, 
可以是浮点数值,其默认单位为px;还可以是带px/vp/fp单位的浮点数值;还可以引用
float资源。text_color为color类型,可以直接设置色值,也可以引用color资源。代码
如下: 
ohos:text_size="66fp" 
ohos:text_color="#FF0000" 
(2)设置字体风格和字重。
字体为text_font属性,可以设置的值包括sans-serif、sans-serif-medium、HwChinesemedium
、sans-serif-condensed、sans-serif-condensed-medium、monospace。italic表示文本
是否斜体字体,为boolean类型,可以直接设置true/false,也可以引用boolean资源。text_ 
weight则表示字重。代码如下: 
ohos:italic="true" 
ohos:text_weight="700" 
ohos:text_font="sans-serif" 
(3)设置文本对齐方式,换行和最大显示行数。
text_alignment表示文本对齐方式,包含left文本靠左对齐,top文本靠顶部对齐,right 
文本靠右对齐,bottom 文本靠底部对齐,horizontal_center文本水平居中对齐,vertical_ 
center文本垂直居中对齐,center文本居中对齐,start文本靠起始端对齐以及end文本靠结
尾端对齐。multiple_lines为多行模式设置,boolean类型。max_text_lines表示文本最大
行数,为integer类型。代码如下: 
ohos:text="Text 是一个文本组件" 
ohos:text_alignment="horizontal_center " 
ohos:multiple_lines="true" 
ohos:max_text_lines="2" 
运行效果如图5-2所示。
(4)自动调节字体大小。
Text对象可以实现根据文本长度来自动调整文本的字体大小和换行。通过设置auto_ 
font_size来控制文本是否自动调整文本字体大小,该属性为boolean类型。效果如图5-3

第5 章 UI 组件 91 
所示,代码如下:
图5-2 文本效果 
图5-3 自动调节字体大小 
ohos:multiple_lines="true" //自动换行
ohos:max_text_lines="1" //最大显示行数
ohos:auto_font_size="true" //自动调节字体大小
(5)跑马灯效果。
在文本过长的情况下,可以通过设置跑马灯效果来实现文本滚动显示。但在这里要注
意的是,首先要关闭文本换行并且设置最大显示行数为1,一般默认即可。代码如下: 
text.setTruncationMode(Text.TruncationMode.AUTO_SCROLLING);//自动滚动状态
text.setAutoScrollingCount(Text.AUTO_SCROLLING_FOREVER); 
text.startAutoScrolling(); //启动跑马灯效果
5.1.2 图像组件
图像组件(Image)是用来在屏幕上显示图片的组件,各种图片的展示都需要该组件的
使用。例如,在做网站首页时需要显示的背景图,动态加载显示用户头像以及朋友圈发布图
片等场景,都可以使用Image图像组件进行显示。
1.创建Image 
首先将所需图片资源image.jpg添加至media文件夹下,这里以“image.jpg”为例。在
image.xml文件中声明组件,然后在Java文件中加载该XML布局。运行效果如图5-4所
示,代码如下:

92 HarmonyOS 应用程序开发与实战(Java 版) 
<Image 
ohos:id="$+id:imageComponent" 
ohos:height="match_parent" 
ohos:width="match_parent" 
ohos:image_src="$media:image"/> 
或者用Java代码创建Image组件,在MainAbilitySlice.java文件中找到onStart()方法,创
建Image组件,代码如下: 
Image image = new Image(getContext()); //创建Image 
image.setPixelMap(ResourceTable.Media_image); //设置要显示的图片
DirectionalLayout layout = new DirectionalLayout(getContext());//创建布局
layout.addComponent(image); //Image 组件添加到布局中
super.setUIContent(layout); 
2.设置Image样式
(1)设置透明度。
通过设置alpha透明度属性来修改图片的透明度,效果如图5-5所示。代码如下: 
ohos:alpha="0.5" //设置透明度为0.5 
(2)设置缩放系数。
通过设置X 轴和Y 轴缩放系数来控制图片的缩放,效果如图5-6所示。代码如下: 
图5-4 创建Image组件 
图5-5 透明度效果 
图5-6 坐标轴缩放 
ohos:scale_x="0.5" 
ohos:scale_y="0.5"

第5 章 UI 组件 93 
图5-7 缩放效果
(3)设置缩放方式。
当图片尺寸与Image尺寸不同时,可以根据不同的缩放方
式对图片进行缩放。缩放方式scale_mode有下面几种: 
● center表示不缩放,按Image大小显示原图中间部分。
● zoom_center表示原图按照比例缩放到与Image最窄
边一致,并居中显示。
● zoom_start表示原图按照比例缩放到与Image最窄边
一致,并靠起始端显示。
● zoom_end表示原图按照比例缩放到与Image最窄边一
致,并靠结束端显示。
● stretch表示将原图缩放到与Image大小一致。
● inside表示将原图按比例缩放到与Image相同或更小
的尺寸,并居中显示。
● clip_center表示将原图按比例缩放到与Image相同或
更大的尺寸,并居中显示。
例如,设置Image的宽为300vp,高为150vp,分别设置缩
放方式为zoom_start、zoom_center和zoom_end,为了突出效
果,将image的背景色设为灰色,运行效果如图5-7所示。
代码如下: 
<Image 
ohos:id="$+id:image" 
ohos:width="300vp" 
ohos:height="150vp" 
ohos:bottom_margin="20vp" 
ohos:image_src="$media:image" 
ohos:background_element="$graphic:background_image" 
ohos:scale_mode="zoom_start"/> 
<Image 
ohos:id="$+id:image1" 
ohos:width="300vp" 
ohos:height="150vp" 
ohos:bottom_margin="20vp" 
ohos:image_src="$media:image" 
ohos:background_element="$graphic:background_image" 
ohos:scale_mode="zoom_center"/> 
<Image 
ohos:id="$+id:image2" 
ohos:width="300vp" 
ohos:height="150vp" 
ohos:image_src="$media:image" 
ohos:background_element="$graphic:background_image" 
ohos:scale_mode="zoom_end"/>

94 HarmonyOS 应用程序开发与实战(Java 版) 
(4)设置裁剪对齐方式。
当Image组件设定的尺寸小于图片实际尺寸时,可以对图片进行裁剪。通过设置clip_ 
alignment样式来进行图片剪裁:left表示左对齐裁剪;right表示右对齐裁剪;top 表示顶
部对齐裁剪;bottom 表示底部对齐裁剪;center表示居中对齐裁剪。
例如,创建一个宽和高都为200vp的Image组件,设置左对齐clip_alignment=“left”, 
效果如图5-8所示。
图5-8 裁剪效果
代码如下: 
<Image 
ohos:id="$+id:image" 
ohos:width="200vp" 
ohos:height="200vp" 
ohos:layout_alignment="center" 
ohos:image_src="$media:image" 
ohos:clip_alignment="left" 
/> 
5.1.3 进度条组件
ProgressBar用于显示内容或操作的进度。可以通过进度条查看一些功能操作的进度。
使用场景:项目开发中通过设置数值改变进度条的样式,或者通过手动拖动改变进度条和
进度值。
1.创建ProgressBar 
在layout目录下的XML 文件中创建一个ProgressBar,同时在Java文件中加载该

第5 章 UI 组件 95 
XML布局。运行效果如图5-9所示。代码如下: 
<ProgressBar 
ohos:id="$+id:progressbar" 
ohos:orientation="horizontal" 
ohos:progress_width="40vp" 
ohos:height="120vp" 
ohos:width="match_parent" 
ohos:max="100" 
ohos:min="0" 
ohos:progress="60" 
ohos:progress_hint_text="60%" 
ohos:progress_hint_text_color="black" 
/> 
图5-9 progressBar效果
2.设置ProgressBar样式
(1)设置ProgressBar的方向。
属性orientation表示排列方向,包含horizontal水平显示和vertical垂直显示。设置
ProgressBar方向为水平,代码如下: 
ohos:orientation="horizontal" 
(2)设置ProgressBar的进度和提示文字。
设置当前进度progress为integer类型,可以直接设置整型数值,也可以引用integer资
源。属性progress_hint_text表示进度提示文本,为string类型。progress_hint_text_color 
表示进度提示文本颜色,为color类型。例如,设置进度为60%,颜色为black,代码如下:

96 HarmonyOS 应用程序开发与实战(Java 版) 
ohos:progress="60" 
ohos:progress_hint_text="60%" //设置进度条数值
ohos:progress_hint_text_color="black" //设置进度条数值颜色
(3)设置最大值和最小值。
通过设置最大值max和最小值min来控制进度条,两个属性都为integer类型,可以直
接设置整型数值,也可以引用integer资源。例如,设置最大值为100,最小值为0,在XML 
文件中设置: 
ohos:max="100" 
ohos:min="0" 
或者在Java中设置: 
progressBar.setMaxValue(100); 
progressBar.setMinValue(0); 
(4)设置ProgressBar的颜色和分割线。
属性background_instruct_element表示背景色,progress_element表示进度条颜色。
两者都为element类型,可直接配置色值,也可引用color资源或引用media/graphic下的图
片资源。代码如下: 
ohos:progress_element="#FF9900" 
ohos:background_instruct_element="#FF0000" 
属性divider_lines_enabled表示分割线,为boolean类型,可以直接设置true/false,也
可以引用boolean资源。divider_lines_number表示分割线数量,为integer类型,可以直接
设置整型数值,也可以引用integer资源。运行效果如图5-10所示,如在XML文件中配置: 
图5-10 进度颜色和分割线效果

第5 章 UI 组件 97 
ohos:divider_lines_enabled="true" //设置是否显示分割线
ohos:divider_lines_number="5" //设置分割线个数
通过在Java文件中设置分割线颜色,代码如下: 
progressBar.setDividerLineColor(Color.black); 
5.1.4 圆形进度条
RoundProgressBar继承自ProgressBar,拥有ProgressBar的属性,在设置同样的属性
时用法和ProgressBar一致,用于显示环形进度。
1.创建RoundProgressBar 
在layout目录下的XML文件中创建一个RoundProgressBar,同时在Java文件中加载
该XML布局。运行效果如图5-11所示,代码如下: 
<RoundProgressBar 
ohos:id="$+id:round_progress_bar" 
ohos:height="250vp" 
ohos:width="250vp" 
ohos:progress_width="15vp" 
ohos:progress="60" 
ohos:progress_color="blue" 
ohos:progress_hint_text="60%" 
ohos:progress_hint_text_color="#007DFF" 
/> 
2.设置样式
组件RoundProgressBar的基础属性与组件ProgressBar保持一致,如设置进度条的大
小、颜色、进度和提示文字等,都使用同样的属性进行控制,具体属性描述可以参考5.1.3节。
这里主要讲解如何设置RoundProgressBar的开始和结束角度。
RoundProgressBar的自有XML属性为start_angle和max_angle。start_angle表示圆
形进度条的起始角度,max_angle表示圆形进度条的最大角度。通过设置这两个属性值来
控制进度条的开始和结束角度。例如,设置start_angle为20,max_angle为340,运行效果
如图5-12所示。代码如下: 
ohos:start_angle="20" 
ohos:max_angle="340" 
5.1.5 时钟组件
时钟组件是Text的子类,所以可以使用Text的一些属性。
1.创建Clock 
在layout目录下的XML文件中创建一个Clock,同时在Java文件中加载该XML布