- VisualStudio2022插件的安装及使用-编程手把手系列文章
- pprof-在现网场景怎么用
- C#实现的下拉多选框,下拉多选树,多级节点
- 【学习笔记】基础数据结构:猫树
我们在自定义组件的时候,无论是用 @Styles 还是 @Extend,都很难真正做到独立的封装样式,因为这两者都不支持导出,不可以跨文件调用 。
这篇文章主要介绍一个接口 AttributeModifier,它很好的解决了这些弊端,可以实现样式的集中管理和复用,支持跨文件调用封装好的样式类 。
AttributeModifier 是一个接口,我们需要实现其中的一个方法 apply<状态名称>Attribute,来实现不同的场景 。
状态名称分为:默认态(Normal)、按压态(Pressed)、焦点态(Focused)、禁用态(Disabled)、选择态(Selected) 。
如果想设置元素的默认样式,就是 applyNormalAttribute,如果想设置元素的按压场景下的样式,就是 applyPressedAttribute 。
declare interface AttributeModifier { applyNormalAttribute?(instance: T): void; applyPressedAttribute?(instance: T): void; applyFocusedAttribute?(instance: T): void; applyDisabledAttribute?(instance: T): void; applySelectedAttribute?(instance: T): void; }
文字描述比较抽象,下面举例代码来讲解:
modifier
,新建个文件index.ets
,封装一个作用于 Button
组件的样式类,给它添加一些样式,如下:export class ButtonModifier implements AttributeModifier { applyNormalAttribute(instance: ButtonAttribute): void { instance .width(150) .height(50) .fontSize(20) .backgroundColor(Color.Orange) } }
AttributeModifier
接口定义了一个 ButtonModifier
样式类applyNormalAttribute
设置默认态样式:包括宽度、高度、字体等import { ButtonModifier } from './modifier/index' @Entry @Component struct Index { @State buttonModifier: ButtonModifier = new ButtonModifier() build() { Column() { Button('按钮') .attributeModifier(this.buttonModifier) } .width('100%') } }
效果如下:
这样我们就实现了一个对 Button 组件的样式封装,并且支持导出,跨文件使用 。
上面给 Button 组件增加了“默认态”的样式,可以在这基础上继续增加“按压态”的样式,就是按钮按下时的样式,如下:
export class ButtonModifier2 implements AttributeModifier { applyNormalAttribute(instance: ButtonAttribute): void { instance .width(150) .height(80) .fontSize(20) .backgroundColor(Color.Orange) } applyPressedAttribute(instance: ButtonAttribute): void { instance .borderWidth(5) .borderColor(Color.Blue) .borderStyle(BorderStyle.Solid) .backgroundColor('#17A98D') } }
import { ButtonModifier2 } from './modifier/index' @Entry @Component struct Index { @State buttonModifier: ButtonModifier2 = new ButtonModifier2() build() { Column() { Button('按钮') .attributeModifier(this.buttonModifier) } .width('100%') } }
效果如下:
在 ButtonModifier3 样式类中,定义一个 isClick 变量,来区分按钮是否点击过,然后分别对点击和没有点击的情况下增加样式,如下:
export class ButtonModifier3 implements AttributeModifier { isClick: boolean = false constructor(flag?: boolean) { this.isClick = !!flag } applyNormalAttribute(instance: ButtonAttribute): void { if (this.isClick) { instance.backgroundColor('#707070') } else { instance .borderColor('#707070') .borderWidth(2) .backgroundColor('#17A98D') } } }
import { ButtonModifier3 } from './modifier/index' @Entry @Component struct Index { @State buttonModifier: ButtonModifier3 = new ButtonModifier3() // @State buttonModifier: ButtonModifier3 = new ButtonModifier3(true) build() { Column() { Button('按钮') .attributeModifier(this.buttonModifier) .onClick(() => { this.buttonModifier.isClick = !this.buttonModifier.isClick }) } .width('100%') } }
效果如下:
我们在实现 AttributeModifier
如果大家有不理解的地方可以留言,或自行阅读文档 文档地址 。 最后此篇关于鸿蒙开发-支持导出,跨文件使用的自定义样式AttributeModifier的文章就讲到这里了,如果你想了解更多关于鸿蒙开发-支持导出,跨文件使用的自定义样式AttributeModifier的内容请搜索CFSDN的文章或继续浏览相关文章,希望大家以后支持我的博客! 。// 作用于 Button 组件,就要传入 ButtonAttribute export class Modifier1 implements AttributeModifier
能力
@Styles
@Extend
AttributeModifier
跨文件导出
不支持
不支持
支持
通用属性设置
支持
支持
支持
通用事件设置
支持
支持
部分支持
组件特有属性设置
不支持
支持
部分支持
组件特有事件设置
不支持
支持
部分支持
参数传递
不支持
支持
支持
多态样式
支持
不支持
支持
业务逻辑
不支持
不支持
支持
cuối cùng
Tôi đang gặp một số vấn đề với quá trình cài đặt processmaker của mình. Tôi đang cố gắng sử dụng hướng dẫn này [url]http://wiki.processmaker.com/index.php/ProcessMaker_Ubuntu
Tôi đang sử dụng ShareKit. Gửi tin nhắn SMS sử dụng MFMessageComposeViewController và người dùng sẽ thấy tiêu đề "Text". Tôi muốn đổi tiêu đề đó thành cái gì đó phản ánh tốt hơn những gì thực sự có sẵn
Tôi cần sử dụng kết hợp thanh hành động và các đoạn trong một trong các ứng dụng Android của mình hướng đến Gingerbread. Vì vậy, tôi đã sử dụng thanh hành động từ thư viện hỗ trợ v7 và đoạn mã từ thư viện hỗ trợ v4 và sử dụng
Tôi hiểu tại sao các nhà cung cấp trình duyệt không muốn giúp tôi chặn luồng UI của họ. Tuy nhiên, tôi không hiểu tại sao lại có: Không có chế độ ngủ trong Web Workers (2) Không có API WebSockets đồng bộ Có chế độ đồng bộ
Gần đây tổ chức của tôi đang cân nhắc sử dụng Docker. Nhóm của chúng tôi sử dụng Cloudera CDH 5.1.2. 1) Cloudera có tương thích với container Docker không? 2) Có sự kết hợp giữa docker và cloudera không?
Tôi đang cố gắng cài đặt rsync 3.2.3 trên máy Mac bằng cách biên dịch nó. Tuy nhiên, tôi muốn cài đặt tất cả các tính năng. Để thực hiện điều này, cần có một số thư viện có sẵn tại đây (https://download.samba.org/pub/rsync/INSTA
Tôi đã chạy thành công thử nghiệm mũi bằng PyDev và muốn thử nose2. Vì vậy, tôi đã cài đặt pip install nose2 và sao chép/dán mã ví dụ từ http://nose2.info/ vào một tệp có tên là
Tôi muốn biết liệu có chức năng/phương thức nào trong LLVM để thêm cấu trúc Open-MP vào LLVM IR không. Lvm-3.0 có còn hỗ trợ lệnh OpenMP không? Câu trả lời hay nhất OpenMP là phần mở rộng ngôn ngữ cấp cao. Vì vậy
Tôi còn rất mới với lập trình CUDA. Tôi sẽ xem qua các ví dụ đi kèm với SDK. Tôi có thể biên dịch mã nhưng khi chạy thì tôi nhận được lỗi sau: "clock.cu(177) : Lỗi API thời gian chạy CUDA 38:
RStudio là một IDE tuyệt vời cho việc phát triển R. Tôi đang tự hỏi liệu có cách nào để hỗ trợ tốt độ phân giải HiDPI không? Hiện tại tôi có màn hình 13" với độ phân giải 3200x1800 và thậm chí còn khó đọc các tùy chọn của RStudio
Tôi đang tìm kiếm một công cụ có thể giúp cung cấp hỗ trợ RDF cho một dự án Django. Cho đến nay tôi đã tìm thấy hai lỗi: django-rdf - lần sửa đổi cuối cùng là 4 năm trước, do đó có vẻ như đây là một dự án đã chết. djubby -
Tôi vừa thử một số Nguyên tắc cốt lõi của JS và thấy rằng công cụ này đánh giá các toán tử quan hệ được nối mà không báo lỗi. Thay vào đó, họ đánh giá theo cách mà chính tôi không thể hiểu được. console.log(1 4 > 3 > 2 > 1); //sai,
Tôi biết etexteditor và vim/emacs. Có trình soạn thảo Windows nào khác hỗ trợ các đoạn mã như textmate không (ví dụ: bạn viết từ kích hoạt, nhấn tab, nó sẽ thay đổi thành một cái gì đó, nhấn tab một lần nữa, nó
Tôi đang cố gắng tìm ra cách tốt nhất để xác thực cấu hình chính sách mạng cho một cụm nhất định. Theo tài liệu Chính sách mạng được thực hiện bởi ne
Thật khó để biết câu hỏi ở đây là gì. Câu hỏi này mơ hồ, không rõ ràng, không đầy đủ, quá rộng hoặc mang tính tu từ và không thể trả lời hợp lý theo hình thức hiện tại. Để được trợ giúp làm rõ vấn đề này để bạn có thể mở lại, hãy truy cập trung tâm trợ giúp. Đã đóng
Z3 có hỗ trợ AUFBV không? Đối với tập lệnh sau: (set-logic AUFBV) (declare-fun x () (_ BitVec 16)) (declare-const t (Array (
Ưu và nhược điểm của việc sử dụng các lớp một phần để viết các bài kiểm tra NUnit là gì? Tôi sẽ bắt đầu: Ưu điểm: Có thể kiểm tra các phương thức riêng tư Nhược điểm: Không thể thực hiện TDD nữa Còn gì nữa? Câu trả lời hay nhất Nhược điểm: Hoặc là bạn phải thử nghiệm một bản dựng khác với bản dựng bạn phát hành,
Thật dễ dàng (đối với 90% tính năng aop) để thực hiện điều này mà không cần bất kỳ hỗ trợ gốc nào trong ngôn ngữ, giống như hầu hết các ngôn ngữ động như python và ruby. Tuy nhiên, Dojo hỗ trợ trực tiếp kể từ phiên bản 1.3.2. Phiên bản mới nhất xảy ra
Tôi đang sử dụng các ký tự châu Á trong ứng dụng Android của mình và tôi biết rằng một số ký tự không thể hiển thị được vì phông chữ hệ thống không hỗ trợ chúng. Tôi truy vấn cơ sở dữ liệu chứa các ký tự châu Á và thường xuyên lấy các lá cờ không thể hiển thị. Những tình huống này thường không quan trọng đối với đơn xin việc của tôi
Xin chào, tôi muốn triển khai một điều khiển mà tôi muốn kích hoạt khi người dùng nhập ký tự @ cho đến khi các khoảng trắng trong văn bản đang chạy không được điền đầy, điều khiển sẽ hiển thị danh sách người dùng và văn bản được nhập sau ký hiệu @ sẽ hiển thị các gợi ý dựa trên các ký tự bàn phím như chúng ta có thể thấy trên Twitter hoặc
Tôi là một lập trình viên xuất sắc, rất giỏi!