首页 > 其他分享 >鸿蒙开发-Divider 组件

鸿蒙开发-Divider 组件

时间:2024-12-06 15:31:41浏览次数:6  
标签:10 自定义 鸿蒙 分割线 ctx 组件 Divider

在 ArkTS 中,Divider组件是用于在界面上显示分割线的组件,以下是其详细介绍:

基本功能

Divider组件主要用于将页面中的不同部分进行视觉上的分隔,使页面布局更加清晰和有条理,增强用户界面的可读性和美观性。

常用属性

color:用于设置分割线的颜色,接受ResourceColor类型的值,可以是系统预定义的颜色资源,也可以是自定义的颜色值。例如:

Divider().color(Color.Gray)

strokeWidth:用于设置分割线的宽度,接受number类型的值,单位为逻辑像素。例如:

Divider().strokeWidth(2)

startMargin和endMargin:分别用于设置分割线起始和结束位置的外边距,接受number类型的值,单位为逻辑像素。可以通过设置这两个属性来调整分割线在水平方向上的位置。例如:

Divider().startMargin(10).endMargin(10)

布局方式

Divider

组件在布局中通常以水平或垂直方向排列,具体取决于其所在父容器的布局方式。

在水平布局的容器中,Divider组件默认以水平方向显示分割线,将容器中的内容在垂直方向上进行分隔。

在垂直布局的容器中,Divider组件默认以垂直方向显示分割线,将容器中的内容在水平方向上进行分隔。

颜色自定义

除了使用color属性设置单一颜色外,还可以通过linearGradient或radialGradient来实现渐变颜色效果。示例代码如下:

// 线性渐变
let linearGradient = new LinearGradient({
  startPoint: { x: 0, y: 0 },
  endPoint: { x: 1, y: 0 },
  colors: [Color.Red, Color.Yellow]
})
Divider().linearGradient(linearGradient)

// 径向渐变
let radialGradient = new RadialGradient({
  center: { x: 0.5, y: 0.5 },
  radius: 0.5,
  colors: [Color.Blue, Color.Green]
})
Divider().radialGradient(radialGradient)

虚线样式自定义

可以使用dashArray和dashOffset属性来设置分割线为虚线样式并进行自定义。其中,dashArray用于指定虚线的线段长度和间隔长度数组,dashOffset用于设置虚线的偏移量。示例代码如下:

Divider().strokeWidth(2).dashArray([5, 3]).dashOffset(2)

两端样式自定义

添加箭头:可以在分割线的两端添加箭头等装饰元素来丰富其样式。这通常需要结合自定义绘制来实现。例如,可以使用Canvas绘制一个带有箭头的分割线。

@Entry
@Component
struct MyComponent {
  build() {
    Column() {
      CustomDivider().width('100%').height(10)
      Text('这是另一部分内容').fontSize(16)
    }.width('100%').height('100%')
  }
}

@Component
struct CustomDivider extends Divider {
  drawCanvas(ctx: CanvasRenderingContext2D) {
    super.drawCanvas(ctx);
    ctx.beginPath();
    ctx.moveTo(0, 5);
    ctx.lineTo(100, 5);
    ctx.lineWidth = 2;
    ctx.strokeStyle = '#FF0000';
    ctx.stroke();
    ctx.beginPath();
    ctx.moveTo(0, 5);
    ctx.lineTo(10, 0);
    ctx.lineTo(10, 10);
    ctx.closePath();
    ctx.fillStyle = '#FF0000';
    ctx.fill();
    ctx.beginPath();
    ctx.moveTo(100, 5);
    ctx.lineTo(90, 0);
    ctx.lineTo(90, 10);
    ctx.closePath();
    ctx.fillStyle = '#FF0000';
    ctx.fill();
  }
}

自定义形状:通过继承Divider组件并重写drawCanvas方法,可以实现完全自定义的分割线形状。例如,绘制一个波浪线形状的分割线。

@Component
struct WaveDivider extends Divider {
  drawCanvas(ctx: CanvasRenderingContext2D) {
    super.drawCanvas(ctx);
    let width = 100;
    let height = 10;
    let offset = 0;
    let amplitude = 3;
    ctx.beginPath();
    for (let x = 0; x <= width; x++) {
      let y = height / 2 + Math.sin((x + offset) * (2 * Math.PI / width)) * amplitude;
      if (x === 0) {
        ctx.moveTo(x, y);
      } else {
        ctx.lineTo(x, y);
      }
    }
    ctx.lineWidth = 2;
    ctx.strokeStyle = '#00FF00';
    ctx.stroke();
  }
}

与其他组件组合自定义

可以将Divider组件与其他组件如Image、Text等组合使用,实现更丰富的样式效果。例如,在分割线上添加文字说明或图标。

Row() {
  Divider().width('50%').strokeWidth(1).color(Color.Gray)
  Text('分割线中间的文字').fontSize(14).margin({ left: 10, right: 10 })
  Divider().width('50%').strokeWidth(1).color(Color.Gray)
}

示例代码

以下是一个简单的示例,展示了Divider组件在不同场景下的使用:

@Entry
@Component
struct MyComponent {
  build() {
    Column() {
      Text('这是一部分内容').fontSize(16)
      Divider().color(Color.Green).strokeWidth(3).startMargin(20).endMargin(20)
      Text('这是另一部分内容').fontSize(16)
    }.width('100%').height('100%')
  }
}

在上述示例中,Divider组件在一个垂直布局的Column容器中使用,将两段文本内容在垂直方向上进行了分隔,分割线的颜色为绿色,宽度为 3 个逻辑像素,并且设置了一定的外边距。

注意事项

  • 当在复杂的布局中使用Divider组件时,需要注意其与其他组件的排列和间距关系,确保分割线的位置和样式符合整体页面设计的要求。

  • 不同设备和屏幕分辨率可能会对分割线的显示效果产生影响,需要在实际测试中进行调整和优化。
    在这里插入图片描述

标签:10,自定义,鸿蒙,分割线,ctx,组件,Divider
From: https://blog.csdn.net/chuanshixx/article/details/144292980

相关文章

  • 前端高级组件(树组与自动填充)封使用示例,看看封装表的青现理解思想就好,商业源码,不能泄
     第一先看树组件          以下是自动提示的封装,以下是效果 以下点击是肯它需要后端反回数据,参数是上面输的值,后端的接口应该如下:importcom.jfinal.core.ActionKey;importcom.jfinal.core.Controller;importcom.jfinal.core.paragetter.Para;......
  • uni-app UI组件
    1.前言个人封装的一系列简单易用的UI组件2.按钮支持大小中三种尺寸,支持主题色全局配置,支持常见的状态色<template> <view:class="['zll-button-wrap',size,disabled?'disabled':'',type=='text'?'text-btn':'']":style=&qu......
  • 鸿蒙 Next 中 State 的使用方法介绍
    在ArkUI框架中,@State装饰器用于管理组件内的状态,使得状态变化能够触发UI的更新。以下将详细介绍@State的使用方法。一、概述1.定义与作用@State装饰的变量,即状态变量,是私有的,只能在组件内部访问。它是大部分状态变量的数据源,一旦其值发生改变,就可以触发直接绑定UI组件的刷新,从......
  • 组策略 计算机配置-管理模板-Windows组件-传递优化- 设置 注册表
    WindowsRegistryEditorVersion5.00;1.绝对最大缓存大小(以GB为单位)[HKEY_LOCAL_MACHINE\SOFTWARE\Policies\Microsoft\Windows\DeliveryOptimization]"MaxCacheSize"="10";例如设置为10GB,按需调整;2.当设备通过VPN连接时启用对等缓存[HKEY_LOCAL_MACHINE\S......
  • rt-thread学习之路第四十九章--组件之FAL flash抽象层
    FAL组件FAL:Flash抽象层。在V4.1.0中,将fal软件包重新定义为RT-Thread内部组件,在使用方式上和以前有这些区别:(1)原本使用fal需要在RT-Thread的包管理器中选择并进行下载;(2)现在只需要在组件中打开使用即可,以下做详细介绍。1、FAL介绍FAL(FlashAbstractionLayer)F......
  • 间接分支追踪(Indirect Branch Tracking,IBT) 是 Intel Control-flow Enforcement Techno
    间接分支追踪(IndirectBranchTracking,IBT)是IntelControl-flowEnforcementTechnology(CET)的核心组件之一,旨在加强程序的控制流保护,防止恶意代码通过控制流劫持技术(如ROP(Return-OrientedProgramming)或JOP(Jump-OrientedProgramming))来绕过安全机制,执行恶意行为。IBT的......
  • 虚拟机(VM)鸿蒙开发软件(DevEco Studio)不能同时使用Hyper-v/解决未开启Hyper-V,开启Hy
    目录问题一:方法:问题二:方法:问题三:方法:解决你的问题,先看问题三,如果没有问题三,再看问题一二!!!!!!问题一:如果你同时用虚拟机(VMware)和鸿蒙开发软件(DevEcoStudio),你在解决了我下面说的问题三后,虚拟机不能用了,显示:解决VMwareWorkstation与Hyper-V不兼容。请先从系......
  • js前端搜索组件flexsearch使用
    说明文档往往有搜索框,可以根据关键字检索文档内容。我有时疑惑这种检索是后端DB检索还是其它的呢?拿bootstrap-table的说明文档看下:是由algolia提供的检索服务api那普通的内容页面有没有可能实现前端检索呢?查资料,找到了flexsearch这个js检索组件,试用下:说明及常用方法有三种类......
  • 鸿蒙技术分享:鸿蒙应用开发:文件下载、选择、打开
    鸿蒙应用开发:文件下载、选择、打开文件下载项目业务需求,一般会有将网络文件下载到沙盒或者公共目录的场景。而文件下载的第一步,是获取下载文件的目标地址选择。按照官方文档的建议,代码如下:import{BusinessError,Callback}from'@ohos.base'import{fileIo,fil......
  • 鸿蒙HarmonyOS应用开发-手写板(二)
            在前一篇手写板的文章中(HarmonyOS应用开发-手写板-CSDN博客),我们通过使用Path实现了一个基本的手写板,但遗憾的是,无法保存所绘制的图像。在本文中,我们将采用canvas和Path2D来重新构建手写板应用。依然只需几十行代码,就能轻松实现手写功能,并添加清空画布以及保存......