五笔打字通主页
做了一个CustomDialog弹窗,用于输入数字。
@Entry
@Component
struct Page6 {
@State message1: string = '默认值'
controller: CustomDialogController = new CustomDialogController({
builder: TextDialog({
confirm: (value) => {
this.message1 = value
}
}), //要加括号,要在这里传参
alignment: DialogAlignment.Bottom, //控制弹窗位置
offset: { dx: 0, dy: -30 }//位置微调 -- 源码来自 wb98.com
})
build() {
Column({ space: 20 }) {
Text(this.message1)
Button('弹出 Dialog')
.onClick(() => {
this.controller.open()
})
}
.width('100%')
.height('100%')
.justifyContent(FlexAlign.Center)
.backgroundColor(Color.Green)
.expandSafeArea([SafeAreaType.SYSTEM], [SafeAreaEdge.TOP, SafeAreaEdge.BOTTOM])
}
}
//========================
@CustomDialog
//自定义弹窗,可以自由输入数字
struct TextDialog {
controller: CustomDialogController = new CustomDialogController({
builder: TextDialog()//控制的对话框名,要加括号
})
confirm: (value: string) => void = () => {
} //回调函数
value1: string = ''
build() {
Column({ space: 10 }) {
Text('请输入你的答案')
TextInput({ placeholder: '请输入数字', text: '' })
.width('80%')
.type(InputType.Number)
.onChange((value) => {
this.value1 = value
})
Row({ space: 30 }) {
Button('取消')
.onClick(() => {
this.controller.close()
})
Button('确定')
.onClick(() => {
this.confirm(this.value1) //通过自定义弹窗的回调函数来获得一个值
this.controller.close()
})
}
}.padding(20)
}
}下面2段代码都是用bindContentCover做的弹窗,高仿上面做的CustomDialog弹窗,也是用于输入数字。
代码1:
@Entry
@Component
struct Page5 {
@State isShow: boolean = false
@State message: string = '默认值'
messageZJ: string = ''
@Builder
myBuilder() {
Stack({ alignContent: Alignment.Bottom }) { //这里调节弹窗位置
// 父容器透明背景
Column() {
// 空容器仅用于布局的底部透明背景
}
.width('100%')
.height('100%')
// .backgroundColor(Color.Transparent)//纯透明
// .backgroundColor('rgba(0,0,0,0.7)') //黑色背景,0.7透明度
.backgroundColor('#8b555555') //这2句是为弹窗加上半透明的背景
.expandSafeArea([SafeAreaType.SYSTEM], [SafeAreaEdge.TOP, SafeAreaEdge.BOTTOM])
// 子组件按钮
Column({ space: 10 }) {
Column({ space: 10 }) { //内层容器
TextInput({ placeholder: '请输入文本', text: '默认文本' })
.width('80%')
.type(InputType.Number)
.cancelButton({
//右边的X按钮
icon: { size: 16 }
})
.onChange((value: string) => {
// console.log('这是:', value)
this.messageZJ = value
})
Row({ space: 20 }) {
Button('取消')
.onClick(() => {
this.isShow = false
})
Button('确定')
.onClick(() => {
this.message = this.messageZJ
this.isShow = false
})
}
}
.backgroundColor(Color.White) //中间对话框背景颜色
.width('100%')
.padding(20)
.borderRadius(10)
}
.backgroundColor(Color.Transparent)
.width('80%')
.margin({bottom:30}) //弹窗位置微调 wb86.com
}
}
//----------------------------
build() {
Column({space:50}) {
Text(this.message)
.bindContentCover($$this.isShow, this.myBuilder(),
{
modalTransition: ModalTransition.NONE, //DEFAULT从下往上,ALPHA是透明度变化
// backgroundColor: Color.Pink
})
.fontColor(Color.White)
Button('弹出 Stack')
.onClick(() => {
this.isShow =true
})
}
.justifyContent(FlexAlign.Center)
.width('100%')
.height('100%')
.backgroundColor('#8b555555')
.backgroundColor(Color.Green)
.expandSafeArea([SafeAreaType.SYSTEM], [SafeAreaEdge.TOP, SafeAreaEdge.BOTTOM])
}
}代码2:
@Entry
@Component
struct Page7 {
@State isShow: boolean = false
@State message: string = '默认值'
messageZJ: string = ''
@Builder
myBuilder() {
Column() {
// 子组件设置不透明背景色
Column({ space: 10 }) {
Column({ space: 10 }) { //内层容器
TextInput({ placeholder: '请输入文本', text: '默认文本' })
.width('80%')
.type(InputType.Number)
.textIndent(0)//设置首行文本缩进
.cancelButton({
//右边的X按钮
icon: { size: 16 }
})
.onChange((value: string) => {
this.messageZJ=value
})
Row({ space: 20 }) {
Button('取消')
.onClick(() => {
this.isShow = false
})
Button('确定')
.onClick(() => {
this.message = this.messageZJ
this.isShow = false
})
}
}
.backgroundColor(Color.White)
.width('100%')
.padding(20)
.borderRadius(10)
}
.backgroundColor(Color.Transparent)
.width('80%')
.height('100%')
.justifyContent(FlexAlign.End)
.offset({y:-30})
}
.width('100%')
.height('100%')
// .backgroundColor(Color.Transparent)//纯透明--源码来自 wb86.com
// .backgroundColor('rgba(0,0,0,0.7)') //黑色背景,0.7透明度
.backgroundColor('#8b555555') //这2句是为弹窗加上半透明的背景
.expandSafeArea([SafeAreaType.SYSTEM], [SafeAreaEdge.TOP, SafeAreaEdge.BOTTOM])
}
build() {
Column({space:20}){
Text(this.message)
.fontColor(Color.White)
Button('确定 Column')
.bindContentCover($$this.isShow, this.myBuilder(),
{
modalTransition: ModalTransition.NONE, //DEFAULT从下往上,ALPHA是透明度变化
// backgroundColor: Color.Pink
})
.onClick(() => {
this.isShow=!this.isShow
})
}
.width('100%')
.height('100%')
.backgroundColor(Color.Green)
.justifyContent(FlexAlign.Center)
.expandSafeArea([SafeAreaType.SYSTEM], [SafeAreaEdge.TOP, SafeAreaEdge.BOTTOM])
}
}来源:济亨网
本文链接:http://wb86.com/post/391.html