鸿蒙OS应用开发实践(三)
经过前两篇的学习,我们了解了DevEco运行一个程序的基本流程和一个鸿蒙OS应用项目的代码结构。
用一句《三体》格式的话说:跑得动hello world,我们就是同志了。
这一篇,我们就自己手动撸一个简单的鸿蒙交互程序:从一个页面跳转到另一个页面。
(一)创建工程
先创建一个新的TV的empty java工程:
点finish后,发现这次从创建到项目环境加载完成,用了很短的时间,这是因为初始环境需要各种配置和下载,类似我们初下完一个大型游戏,首次需要更新内容一般。
(二)自定义布局
进入界面后,默认的IDE已经创建了一个hello world程序,我们打开entry -> src -> main ->resources -> base -> layout -> ability_main.xml 布局文件:
我们先清掉原本的布局,重新写入我们自己的布局:
<?xml version="1.0" encoding="utf-8"?> <DependentLayout xmlns:ohos="http://schemas.huawei.com/res/ohos" ohos:width="match_parent" ohos:height="match_parent" ohos:background_element="#000000"> <Text ohos:id="$+id:text" ohos:width="match_content" ohos:height="match_content" ohos:center_in_parent="true" ohos:text="你好,鸿蒙OS" ohos:text_color="white" ohos:text_size="32fp"/> <Button ohos:id="$+id:button" ohos:width="match_content" ohos:height="match_content" ohos:text_size="20fp" ohos:text="跳转" ohos:left_margin="50vp" ohos:bottom_margin="50vp" ohos:right_padding="80vp" ohos:left_padding="80vp" ohos:text_color="white" ohos:background_element="$graphic:button_element" ohos:center_in_parent="true" ohos:align_parent_bottom="true"/> </DependentLayout>
DependentLayout标签指定了这是一个相对位置布局,意思就是布局里的每个组件可以指定相对于其他同级组件的位置,也可以指定相对于父组件的位置。
Button标签表示了这里将会布局创建一个按钮,大部分设置信息同Text。
按钮的背景指定了“button_element”来显示,这是另外一个布局文件,我们来手动创建,在resources -> base ->graphic 目录下,右键创建一个File,命名为:button_element.xml
在button_element.xml添加如下代码:
<?xml version="1.0" encoding="utf-8"?> <shape xmlns:ohos="http://schemas.huawei.com/res/ohos" ohos:shape="rectangle"> <corners ohos:radius="10"/> <solid ohos:color="#FF007DFF"/> </shape>
目前鸿蒙官方提供形状:rectangle(方形)和oval(椭圆),通过不同的内外边距设定,就可以衍生出其他形状:圆形,椭圆,正方,胶囊。
corners标签表示了圆角设定,将方形设定圆角,我们就可以得到一个圆角按钮。
默认的模版使用的是方向布局DirectionLayout(垂直或者横向),这里我们修改使用DependentLayout相对位置布局,这样可以更加方便的控制文本和按钮的相对位置。
运行效果:
(三)创建建跳转页面
当然,当前点击跳转按钮不会有任何反应,一方面我们还没写交互逻辑,另一方面,我们要跳转的页面也还没写。我们继续下一步,写一个新的页面。
在项目对应的目录下,创建一个空的FA(java),如下图:
这里我们将新页面命名为:NewPage
下面两项不勾选,直接点finish。
创建后,目录下除了刚才创建的newpage,还会自动创建一个newpageslice在slice目录下以及对应的布局文件在layout目录下:
之前在跑hello world的时候,我们说过,ability是入口,逻辑代码都在slice里,同样,在这个newpage里,它也是将逻辑route到了slice类中。
我们打开ability_new_page.xml,简单修改下输出文本:
(四)主页面添加交互逻辑
到这里,我们的第二个页面算是简单的创建完毕了,下一步,我们需要在主页面下添加交互逻辑,让它可以跳转到这个新的slice页面中来,在主页面(MainAbilitySlice)中去添加按钮点击的事件逻辑:
Button btn = (Button) findComponentById(ResourceTable.Id_button); if (btn != null) { //添加按钮点击事件监听 btn.setClickedListener(new Component.ClickedListener() { @Override public void onClick(Component component) { Intent newpageIntent = new Intent(); //指定目标页面 Operation operation = new Intent.OperationBuilder() .withDeviceId("") .withBundleName("com.qibiao.harmonyosdemo") .withAbilityName("com.qibiao.harmonyosdemo.NewPage") .build(); newpageIntent.setOperation(operation); //启动目标页面 startAbility(newpageIntent); } }); }
这里会要求import新的包,以提供组件模块,不然上面的代码输完是会标红报错的。需要引入的包:
import ohos.aafwk.content.Operation; import ohos.agp.components.Button; import ohos.agp.components.Component;
解析下代码:
findComponentById通过id来找到按钮组件,然后这个id对应的就是我们在布局文件中设置的:
ohos:id="$+id:button"
onClick对应按钮的点击事件,这个不是自定义函数,属于事件触发函数。
Intent上回说过了,它是一个中间件,协助当前页面往新页面通讯。
Operation operation = new Intent.OperationBuilder() .withDeviceId("") .withBundleName("com.qibiao.harmonyosdemo") .withAbilityName("com.qibiao.harmonyosdemo.NewPage") .build();
这串代码指定了我们要跳转的目标页面,需要指定目标的包名,还有Ability名称(非slice)。
最后使用startAbility()接口启动那个页面。
(五)运行
再次运行查看效果(先开远程虚拟设备,再点运行):
效果出来了,点击右侧的返回,还能回到主界面。
本篇完。下篇见。
作者:涂启标
想了解更多内容,请访问: 51CTO和华为官方战略合作共建的鸿蒙技术社区https://harmonyos.51cto.com

低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
定义Go语言云应用开发的“通信协议”
本人在Gopher大会进行了分享,在分享后将核心内容写了下来,供参考。 华为在2016年成立Cloud BU,引入了kubernetes,prometheus等CNCF项目。这些软件大部分有Go语言编写,研发团队自然开始引入Go语言构建云服务,然而那时Go的生态并不完善,所以要自己从头到尾编写基础能力模块,以供不同云应用引入。 首先从一个简单云应用展开看他的实现过程 一个简单的注册发现服务Service Center,和eureka一样,这里不多赘述他的职责。 动静分离 为了减少数据信息量,抽出公共部分统一进行管理,通过静态信息来划分实例归属。所以微服务与微服务实例为1对n的映射,将微服务名,版本,描述等信息都抽到了公共部分,通过降低冗余度,来减少网络的开销,这样比如“描述“这样的信息就不在网络中传递,同时又能兼顾微服务管理能力,规范化了微服务模型。比如一个微服务必须具备版本信息。而真正下发到微服务缓存中的实例信息就少多了,许多字段是给人类看到,并非机器执行所需要的。 从图中我们看到微服务静态信息里面包含了一个Schemas,里面关联了微服务所关联的契约文档,同样是1对n的映射关系。可...
- 下一篇
只需两步,Tomcat JVM 参数性能迅速调到最优!
Tomcat性能调优 找到Tomcat根目录下的conf目录,修改server.xml文件的内容。对于这部分的调优,我所了解到的就是无非设置一下Tomcat服务器的最大并发数和Tomcat初始化时创建的线程数的设置,当然还有其他一些性能调优的设置,下图是我根据我机子的性能设置的一些参数值,给各位详细解释一下吧: 1、URIEncoding=“UTF-8”:设置Tomcat的字符集。这种配置我们一般是不会设置的,因为关于乱码的转换我们会在具体项目中具体处理,直接修改Tomcat的字符集未免过于太死板。 2、maxThreads=“300”:设置当前Tomcat的最大并发数。Tomcat默认配置的最大请求数是150个,即同时能支持150个并发。但是在实际运用中,最大并发数与硬件性能和CPU数量都有很大关系的,更好的硬件、更高的处理器都会使Tomcat支持更多的并发数。如果一般在实际开发中,当某个应用拥有 250 个以上并发的时候,都会考虑到应用服务器的集群。 3、minSpareThreads=“50”:设置当前Tomcat初始化时创建的线程数,默认值为25。 4、acceptCount=...
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
推荐阅读
最新文章
- SpringBoot2初体验,简单认识spring boot2并且搭建基础工程
- CentOS7编译安装Gcc9.2.0,解决mysql等软件编译问题
- Docker安装Oracle12C,快速搭建Oracle学习环境
- SpringBoot2全家桶,快速入门学习开发网站教程
- SpringBoot2配置默认Tomcat设置,开启更多高级功能
- CentOS关闭SELinux安全模块
- Eclipse初始化配置,告别卡顿、闪退、编译时间过长
- CentOS6,CentOS7官方镜像安装Oracle11G
- SpringBoot2整合MyBatis,连接MySql数据库做增删改查操作
- Docker使用Oracle官方镜像安装(12C,18C,19C)