HarmonyOS Next thực hành##Dịch vụ ứng dụng SDK HarmonyOS##Giáo dục##
Tài liệu tham khảo: https://developer.huawei.com/consumer/cn/doc/harmonyos-references/js-apis-window#getwindowproperties9
Trong mô hình Stage, các tình huống quản lý cửa sổ ứng dụng điển hình bao gồm:
- Thiết lập thuộc tính cửa sổ chính của ứng dụng và trang đích
- Thiết lập thuộc tính cửa sổ con của ứng dụng và trang đích
- Thử nghiệm khả năng toàn màn hình của cửa sổ
- Thiết lập cửa sổ nổi
- Theo dõi sự kiện cửa sổ không tương tác và có thể tương tác
Dưới đây là cách truy xuất thông số của cửa sổ: Bước 1: Lấy lớp Window
getLastWindow(ctx: BaseContext): Promise<Window>
Lấy cửa sổ con trên cùng trong ứng dụng hiện tại. Nếu không có cửa sổ con, thì trả về cửa sổ chính của ứng dụng. Sử dụng hàm gọi lại bất đồng bộ Promise.
Bước 2: Lấy thông số của cửa sổ hiện tại
getWindowProperties(): WindowProperties
Lấy thông số của cửa sổ hiện tại, trả về đối tượng WindowProperties.
Giải thích các thuộc tính của WindowProperties
- windowRect: Kích thước cửa sổ, có thể được lấy trong giai đoạn onPageShow hoặc onForeground của chu kỳ trang.
- drawableRect: Kích thước khu vực có thể vẽ bên trong cửa sổ. Các cạnh trái và trên được tính theo cửa sổ. Trong mô hình Stage, cần gọi loadContent() hoặc setUIContent() để tải nội dung trang trước khi sử dụng giao diện này.
- type: Loại cửa sổ.
- isFullScreen: Có phải là toàn màn hình không, mặc định là false. true cho biết toàn màn hình; false cho biết không toàn màn hình.
- isLayoutFullScreen: Cửa sổ có phải ở chế độ toàn màn hình và nằm trong chế độ toàn màn hình (không ở trong cửa sổ nổi, phân chia màn hình, v.v.) không, mặc định là false. true cho biết chế độ toàn màn hình; false cho biết không toàn màn hình hoặc không ở chế độ toàn màn hình.
- focusable: Cửa sổ có thể nhận tập trung không, mặc định là true. true cho biết có thể nhận tập trung; false cho biết không thể nhận tập trung.
- touchable: Cửa sổ có thể chạm vào không, mặc định là true. true cho biết có thể chạm vào; false cho biết không thể chạm vào.
- brightness: Độ sáng màn hình. Giá trị này là số thực, phạm vi độ sáng có thể thiết lập là [0.0, 1.0], giá trị 1.0 biểu thị độ sáng tối đa. Nếu cửa sổ không thiết lập độ sáng, thì độ sáng sẽ theo hệ thống, lúc đó giá trị độ sáng thu được là -1.
- isKeepScreenOn: Màn hình có giữ nguyên sáng không, mặc định là false. true cho biết giữ nguyên sáng; false cho biết không giữ nguyên sáng.
- isPrivacyMode: Chế độ riêng tư có được bật không, mặc định là false. true cho biết chế độ đã bật; false cho biết chế độ đã tắt.
- isTransparent: Màu nền cửa sổ có trong suốt không, mặc định là false. true cho biết trong suốt; false cho biết không trong suốt.
- id: ID cửa sổ, giá trị mặc định là 0, kiểu dữ liệu là số nguyên.
- displayId: ID màn hình mà cửa sổ đang hiển thị, mặc định là ID màn hình chính, kiểu dữ liệu là số nguyên.
Dưới đây là ví dụ thực hành để truy xuất kích thước chiều rộng và chiều cao của thông số cửa sổ:
import { common } from '@kit.AbilityKit';
import { window } from '@kit.ArkUI';
import { BusinessError } from '@kit.BasicServicesKit';
@Entry
@Component
struct GetWindowPropertiesPage {
@State widthValue: number = 0
@State heightValue: number = 0
aboutToAppear(): void {
try {
let context = getContext(this) as common.UIAbilityContext;
let promise = window.getLastWindow(context);
promise.then((data) => {
//Lấy đối tượng cửa sổ
let windowObject = data;
try {
//Lấy thông số cửa sổ
let properties = windowObject.getWindowProperties();
let rect = properties.windowRect;
//rect.width: chiều rộng cửa sổ; rect.height: chiều cao cửa sổ
this.widthValue = px2vp(rect.width)
this.heightValue = px2vp(rect.height)
} catch (exception) {
console.error('Không thể truy xuất thông số cửa sổ. Nguyên nhân: ' + JSON.stringify(exception));
}
console.info('Truy xuất thành công cửa sổ trên cùng. Dữ liệu: ' + JSON.stringify(data));
}).catch((err: BusinessError) => {
console.error('Truy xuất thất bại cửa sổ trên cùng. Nguyên nhân: ' + JSON.stringify(err));
});
} catch (exception) {
console.error('Truy xuất thất bại cửa sổ trên cùng. Nguyên nhân: ' + JSON.stringify(exception));
}
}
build() {
Column({ space: 10 }) {
Text('Trang Truy xuất Thông số Cửa sổ')
.fontSize(20)
.fontWeight(FontWeight.Bold)
Text(`Chiều rộng = ${this.widthValue}`)
Text(`Chiều cao = ${this.heightValue}`)
}
.height('100%')
.width('100%')
}
}