文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

鸿蒙HarmonyOS三方件开发指南(1)-PrecentPositionLayout

2024-12-03 13:11

关注

想了解更多内容,请访问:

51CTO和华为官方合作共建的鸿蒙技术社区

https://harmonyos.51cto.com/

1. PrecentPositionLayout功能介绍

1.1. 组件介绍:

SDK提供了不同布局规范的组件容器,例如以单一方向排列的DirectionalLayout、以相对位置排列的DependentLayout、以确切位置排列的PositionLayout等。

其中PositionLayout中组件的位置是以绝对像素点定义的,无法实现根据屏幕的大小自适应。因此,引入一种以百分比方式定义的PrecentPositionLayout布局容器,通过它可以很方便的实现屏幕自适应。

1.2. 手机模拟器上运行效果:


2. PrecentPositionLayout使用方法

2.1. 新建工程,增加组件Har包依赖

在应用模块中调用HAR,只需要将precentpositionlayout.har复制到entry\libs目录下即可(由于build.gradle中已经依赖libs目录下的*.har,因此不需要再做修改)。

2.2. 修改主页面的布局文件

修改主页面的布局文件ability_main.xml,将跟组件容器修改为com.isoftstone.precentpositionlayout.PrecentPositionLayout,然后再增加5个Text组件,分别位于屏幕的左上,左下,右上,右下和中间,每个组件的长度和宽度都占屏幕的25%。修改后代码如下:

  1. "1.0" encoding="utf-8"?> 
  2.  
  3.   
  4.  
  5.  
  6.     xmlns:ohos="http://schemas.huawei.com/res/ohos" 
  7.  
  8.     ohos:height="match_parent" 
  9.  
  10.     ohos:width="match_parent"
  11.  
  12.   
  13.  
  14.     
  15.  
  16.         ohos:id="$+id:text_helloworld" 
  17.  
  18.         ohos:height="250" 
  19.  
  20.         ohos:width="250" 
  21.  
  22.         ohos:left_margin="0" 
  23.  
  24.         ohos:top_margin="0" 
  25.  
  26.         ohos:background_element="$graphic:background_text" 
  27.  
  28.         ohos:text="左上25%" 
  29.  
  30.         ohos:text_size="50" 
  31.  
  32.         /> 
  33.  
  34.   
  35.  
  36.     
  37.  
  38.         ohos:id="$+id:text_helloworld" 
  39.  
  40.         ohos:height="250" 
  41.  
  42.         ohos:width="250" 
  43.  
  44.         ohos:left_margin="750" 
  45.  
  46.         ohos:top_margin="0" 
  47.  
  48.         ohos:background_element="$graphic:background_text" 
  49.  
  50.         ohos:text="右上25%" 
  51.  
  52.         ohos:text_size="50" 
  53.  
  54.         /> 
  55.  
  56.   
  57.  
  58.     
  59.  
  60.         ohos:id="$+id:text_helloworld" 
  61.  
  62.         ohos:height="250" 
  63.  
  64.         ohos:width="250" 
  65.  
  66.         ohos:left_margin="0" 
  67.  
  68.         ohos:top_margin="750" 
  69.  
  70.         ohos:background_element="$graphic:background_text" 
  71.  
  72.         ohos:text="左下25%" 
  73.  
  74.         ohos:text_size="50" 
  75.  
  76.         /> 
  77.  
  78.   
  79.  
  80.     
  81.  
  82.         ohos:id="$+id:text_helloworld" 
  83.  
  84.         ohos:height="250" 
  85.  
  86.         ohos:width="250" 
  87.  
  88.         ohos:left_margin="750" 
  89.  
  90.         ohos:top_margin="750" 
  91.  
  92.         ohos:background_element="$graphic:background_text" 
  93.  
  94.         ohos:text="右下25%" 
  95.  
  96.         ohos:text_size="50" 
  97.  
  98.         /> 
  99.  
  100.   
  101.  
  102.     
  103.  
  104.         ohos:id="$+id:text_helloworld" 
  105.  
  106.         ohos:height="250" 
  107.  
  108.         ohos:width="250" 
  109.  
  110.         ohos:left_margin="375" 
  111.  
  112.         ohos:top_margin="375" 
  113.  
  114.         ohos:background_element="$graphic:background_text" 
  115.  
  116.         ohos:text="中心25%" 
  117.  
  118.         ohos:text_size="50" 
  119.  
  120.         /> 
  121.  
  122.   
  123.  
  124.  

 2.3. 增加Text组件的背景资源文件

为方便观察,上一步我们将Text组件设置了一个绘制背景graphic:background_text。

这里需要在resources/base/grahic目录下新增一个可绘制资源文件。

右键点击graphic,选择New-File,文件名输入background_text.xml。


文件内容如下:(可复制background_ability_main.xml的内容,修改color值即可)

  1. "1.0" encoding="UTF-8" ?> 
  2.  
  3. "http://schemas.huawei.com/res/ohos" 
  4.  
  5.        ohos:shape="rectangle"
  6.  
  7.     
  8.  
  9.         ohos:color="#00FFFF"/> 
  10.  
  11.  

 2.4. 修改MainAbilitySlince的UI加载代码

在MainAbilitySlince类的onStart函数中,增加如下代码。

  1. public void onStart(Intent intent) { 
  2.  
  3.     super.onStart(intent); 
  4.  
  5.     // 解析xml获得PrecentPositionLayout对象 
  6.  
  7.     PrecentPositionLayout precentPositionLayout = (PrecentPositionLayout) LayoutScatter.getInstance(getContext()).parse(ResourceTable.Layout_ability_main, nullfalse); 
  8.  
  9.   
  10.  
  11.     // 自动调整组件的百分比 
  12.  
  13.     precentPositionLayout.AutoSize(); 
  14.  
  15.   
  16.  
  17.     // 设置到UI 
  18.  
  19.     super.setUIContent(precentPositionLayout); 
  20.  
  21.     //super.setUIContent(ResourceTable.Layout_ability_main); 
  22.  

 3. PrecentPositionLayout开发实现

3.1. 新建一个Module

新建一个Module,类型选择HarmonyOS Library,模块名为precentpositionlayout,如图:


3.2. 新建一个PrecentPositionLayout类

新建一个PrecentPositionLayout类,继承自PositionLayout类,并增加AutoSize()方法。

  1.  
  2.  
  3. public void AutoSize() { 
  4.  
  5.     // 获取屏幕分辨率 
  6.  
  7.     Optional display = DisplayManager.getInstance().getDefaultDisplay(this.getContext()); 
  8.  
  9.     Point pt = new Point(); 
  10.  
  11.     display.get().getSize(pt); 
  12.  
  13.   
  14.  
  15.     // 去除上面栏和下面导航栏的高度 
  16.  
  17.     pt.modify(pt.getPointX(), pt.getPointY() - 160); 
  18.  
  19.   
  20.  
  21.     // 调增各组件的大小 
  22.  
  23.     int childCount = getChildCount(); 
  24.  
  25.     for (int i = 0; i < childCount; i++) { 
  26.  
  27.         Component component = getComponentAt(i); 
  28.  
  29.         ComponentContainer.LayoutConfig config = component.getLayoutConfig(); 
  30.  
  31.         component.setLeft(config.getMarginLeft() * pt.getPointXToInt() / 1000); 
  32.  
  33.         component.setTop(config.getMarginTop() * pt.getPointYToInt() / 1000); 
  34.  
  35.         component.setWidth(config.width * pt.getPointXToInt()  / 1000); 
  36.  
  37.         component.setHeight(config.height * pt.getPointYToInt()  / 1000); 
  38.  
  39.     } 
  40.  
  41.   

 3.3. 编译HAR包

利用Gradle可以将HarmonyOS Library库模块构建为HAR包,构建HAR包的方法如下:

在Gradle构建任务中,双击PackageDebugHar或PackageReleaseHar任务,构建Debug类型或Release类型的HAR。

待构建任务完成后,可以在PrecentPositionLayout> bulid > outputs > har目录中,获取生成的HAR包。


项目源代码地址:https://github.com/isoftstone-dev/PersentPositionLayout_HarmonOS

©著作权归作者和HarmonyOS技术社区共同所有,如需转载,请注明出处,否则将追究法律责任

想了解更多内容,请访问:

51CTO和华为官方合作共建的鸿蒙技术社区

https://harmonyos.51cto.com/

 

来源:鸿蒙社区内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯