鸿蒙实战开发之常见设置圆角(一)

📒 博客首页:✎﹏ℳ๓敬坤的博客 🎈
😊 我只是一个代码的搬运工 🎃
🎉 欢迎来访的读者关注、点赞和收藏 🤞
😉有问题可以私信交流 😆
📃 文章标题:【鸿蒙实战开发之常见设置圆角(一)】 🖍

图片设置圆角

 //首先找到我们图片组件
Image img_logo = (Image)findComponentById(ResourceTable.Id_login_logo);
//通过setCornerRadius函数设置圆角单位f
img_logo.setCornerRadius(1000f);

输入框设置圆角

第一步设置我们background_element属性引入外部border_radius_12.xml文件

<TextField
   ohos:id="$+id:user"
   ohos:height="50vp"
   ohos:width="312vp"
   ohos:background_element="$graphic:border_radius_12"
   >
</TextField>

第二步设置外部border_radius_12.xml设置如下

<?xml version="1.0" encoding="utf-8"?>
<shape
    xmlns:ohos="http://schemas.huawei.com/res/ohos"
    ohos:shape="rectangle">
    <!-- 设置输入框的圆角 -->
    <corners
        ohos:radius="12vp"
        />
    <!-- 设置输入框的边框颜色 -->
    <solid
        ohos:color="#FFFFFF"/>
</shape>

按钮设置圆角和圆角

//找到我们的按钮
Button login_btn = (Button) findComponentById(ResourceTable.Id_login_btn);
//ShapeElement提供一个带有颜色渐变的Element实例
ShapeElement shapeElement = new ShapeElement();
//设置渐变的起始结束方向
shapeElement.setGradientOrientation(ShapeElement.Orientation.BOTTOM_TO_TOP);
RgbColor[] rgbColors = new RgbColor[2];
//0x后面两面代表透明度十六进制FF代表1 33代表0.2后面是十六进制颜色
rgbColors[0] = RgbColor.fromArgbInt(0x33F60300);
rgbColors[1] = RgbColor.fromArgbInt(0x33FF6C5A);
//设置渐变色
shapeElement.setRgbColors(rgbColors);
//设置圆角
shapeElement.setCornerRadius(100);
<think>好的,我现在需要回答用户关于ArkTS中@Extend装饰器的用法的问题。首先,我需要回忆下@Extend在ArkTS中的作用和基本用法。记得@Extend主要用于扩展组件的样式,允许开发者定义可复用的样式集合,类似于CSS中的类。但具体怎么用呢? 用户之前的问题是关于@Extend的使用,所以我需要详细说明它的功能、语法以及使用场景。可能还需要比较其他装饰器如@Styles的区别,这样用户能更清楚何时使用@Extend。 首先,我应该从基本定义开始,解释@Extend是什么,然后给出语法结构。比如,@Extend装饰的函数,用来扩展组件的样式,可以在多个组件中复用。然后举个简单的例子,比如定义种文本样式,然后在不同的Text组件中应用。 接下来,可能需要说明@Extend的些限制,比如不能用在自定义组件上,只能用于系统内置组件,如Text、Button等。同时,它支持参数,可以动态调整样式,这也是比@Styles更灵活的地方。这里可能需要对比@Styles和@Extend的不同,比如@Styles定义的样式是静态的,而@Extend可以接受参数动态变化。 然后,用户可能会想知道如何正确使用参数化的@Extend,这里需要举个带参数的例子,比如定义个带颜色参数的扩展样式,然后应用在不同颜色的文本上。同时,需要注意参数的类型,比如颜色参数应该用Color类型。 还需要提到组合样式的功能,即@Extend可以和其他样式组合使用,例如同时应用多个@Extend样式或者和行内样式结合。这时候举个组合的例子会更有帮助,比如先定义个基础的文本样式,再定义个颜色样式,然后在组件中同时应用这两个样式。 另外,使用注意事项也很重要,比如不支持内部状态,不能使用状态变量,只能用于样式属性的设置。还要强调它和@Styles的区别,特别是参数化和非参数化的对比,以及适用场景的不同,比如需要复用带动态参数的样式时用@Extend,而固定样式用@Styles。 最后,总结下@Extend的核心优势,比如提高代码复用性,保持UI致性,动态调整样式等。同时给出个综合性的示例,展示如何在实际开发中使用@Extend来优化代码结构。 在整理这些思路时,我需要确保语言简洁明了,结构清晰,分点说明,并配合代码示例,这样用户能更容易理解和应用。同时要注意避免技术错误,比如语法是否正确,参数传递是否恰当,以及是否符合ArkTS的最新文档规范。</think>好的!`@Extend` 是 ArkUI(鸿蒙应用开发框架)中用于**扩展组件样式**的核心装饰器,主要作用是**定义可复用的样式逻辑**,类似 CSS 中的类样式。以下是详细用法解析: --- ### **、基础语法** ```typescript // 定义 @Extend(组件类型) function 样式名(参数?) { // 样式属性设置 } // 使用 组件名() .样式名(参数?) ``` --- ### **二、核心功能与示例** #### **1. 基础样式复用** ```typescript // 定义个红色加粗文本样式 @Extend(Text) function redBoldText() { .fontColor(Color.Red) .fontWeight(FontWeight.Bold) } // 使用 Text('Hello ArkTS') .redBoldText() // 应用样式 ``` #### **2. 参数化样式** ```typescript // 定义可动态设置颜色的文本样式 @Extend(Text) function dynamicColorText(color: Color) { .fontColor(color) .fontSize(20) } // 使用 Text('参数化样式') .dynamicColorText(Color.Blue) // 传入颜色参数 ``` #### **3. 组合样式** ```typescript // 定义基础样式 @Extend(Text) function baseTextStyle() { .fontSize(18) .fontWeight(500) } // 定义强调样式 @Extend(Text) function highlightText(color: Color) { .fontColor(color) .textDecoration({ type: TextDecorationType.Underline }) } // 组合使用 Text('组合样式示例') .baseTextStyle() .highlightText(Color.Green) ``` --- ### **三、关键限制与最佳实践** #### **1. 限制条件** - **仅支持系统组件**:不能用于自定义组件 ```typescript // ✅ 正确:用于 Text 组件 @Extend(Text) function myStyle() { ... } // ❌ 错误:用于自定义组件 @Extend(MyComponent) function customStyle() { ... } ``` - **无状态性**:不能访问组件状态变量(需用 `@Styles` 替代) - **不继承组件属性**:仅能扩展样式属性 #### **2. 与 @Styles 对比** | 特性 | `@Extend` | `@Styles` | |---------------------|------------------------------|-----------------------------| | **作用对象** | 系统组件 | 自定义组件/系统组件 | | **参数支持** | ✅ 支持 | ❌ 不支持 | | **状态访问** | ❌ 不支持 | ✅ 支持(通过 this.xxx) | | **复用方式** | 组合式扩展 | 固定样式模板 | --- ### **四、典型应用场景** 1. **统 UI 规范**:定义全局按钮/文本样式 ```typescript @Extend(Button) function primaryButton() { .width('90%') .backgroundColor(Color.Blue) } ``` 2. **动态主题切换**:通过参数传递颜色/尺寸 3. **代码瘦身**:消除重复样式代码 --- ### **五、综合实战案例** ```typescript // 定义参数化边框样式 @Extend(Text) function borderedText( color: Color, radius: number = 4 ) { .border({ width: 1, color }) .borderRadius(radius) .padding(10) } // 使用 Column() { Text('警告信息') .borderedText(Color.Red, 8) // 红色圆角边框 Text('普通提示') .borderedText(Color.Gray) // 默认圆角4 } ``` --- ### **六、常见问题** **Q:什么时候该用 `@Extend` 而不是 `@Styles`?** A:当需要: - 复用系统组件样式且需要参数化时 → 用 `@Extend` - 在自定义组件内封装样式或需要访问状态 → 用 `@Styles` **Q:能否多层嵌套 `@Extend` 样式?** A:支持!可以链式调用多个 `@Extend` 样式: ```typescript Text('多层样式') .styleA() .styleB() .styleC() ``` 掌握 `@Extend` 可以显著提升代码复用率和可维护性,建议在项目初期规划好全局样式体系。需要深入讨论具体场景吗? 😊
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

✎﹏ℳ๓敬坤

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值