数据人与超自然意识 发表于 2024-9-2 00:20:13

鸿蒙结构响应差别设备

01.自适应结构

01.拉伸能力

flexGrow:设置父容器在主轴方向上的剩余空间分配给此属性地点组件的比例。
默认值
flexShrink:设置父容器压缩尺寸分配给此属性地点组件的比例。
父容器为column row时,默认值:0
父容器为flex时,默认值:1
02.均分能力

justifyContent:将变革的空间,均匀分配给容器组件内空白地域
常用的:SpaceBetween 两端对齐 SpaceAround:相邻元素之间间隔雷同,首尾一半 SpaceEvenly:均匀分配
03.占比能力

width:要设置的组件宽度
height:要设置的组件高度
layoutWeight:父容器尺寸确定时,设置了layoutWeight属性的子元素与兄弟元素占主轴尺寸按照权重进行分配
04.缩放能力

aspectRatio:指定当前组件的宽高比
05.延伸能力

延伸能力是指容器组件内的子组件,按照其在列表中的先后顺序,随容器组件尺寸变革显示或隐蔽,隐蔽时可以通过滑动切换显示。实现的方式是通过 List 组件或 Scroll 组件
06.隐蔽能力

displayPriority:设置当前组件在结构容器中显示的优先级,当父容器空间不足时,低优先级的组件会被隐蔽。
07.折行能力

折行能力是指容器组件尺寸发生变革,当结构方向尺寸不足以显示完整内容时自动换行。折行能力通过使用 Flex折行结构 (将wrap属性设置为FlexWrap.Wrap)实现
02.响应式结构

01.断点

将窗口宽度划分为差别的范围(即断点),监听窗口尺寸变革,当断点改变时同步调解页面结构
https://img-blog.csdnimg.cn/direct/980945877f4e4b71a6d287253dc62a49.png#pic_center
02.媒体查询

媒体查询常用于下面两种场景:

[*]针对设备和应用的属性信息(比如显示地域、深浅色、分辨率),设计出相匹配的结构。
[*]当屏幕发生动态改变时(比如分屏、横竖屏切换),同步更新应用的页面结构。
[*]当设备尺寸发生改变的时候存储在AppStorage上面的值会发生改变就可以用来切换差别的设备尺寸的结构
import mediaquery from '@ohos.mediaquery';
const listenerXS: mediaquery.MediaQueryListener = mediaquery.matchMediaSync('(0vp<=width<320vp)');
const listenerSM: mediaquery.MediaQueryListener = mediaquery.matchMediaSync('(320vp<=width<600vp)');
const listenerMD: mediaquery.MediaQueryListener = mediaquery.matchMediaSync('(600vp<=width<840vp)');
const listenerLG: mediaquery.MediaQueryListener = mediaquery.matchMediaSync('(840vp<=width)');

@Entry
@Component
struct MediaQuery {
    // 2. 创建监听器
    @StorageProp("breakPoint") breakPoint:string = 'XS'
    // 3. 注册监听器
    aboutToAppear(): void {
      // 添加回调函数
      listenerXS.on('change', (res: mediaquery.MediaQueryResult) => {
            console.log('changeRes:', JSON.stringify(res))
            if(res.matches){
                AppStorage.set('breakPoint','XS')
            }
      })
      listenerSM.on('change', (res: mediaquery.MediaQueryResult) => {
            console.log('changeRes:', JSON.stringify(res))
            if(res.matches){
                AppStorage.set('breakPoint','SM')
            }
      })
            listenerMD.on('change', (res: mediaquery.MediaQueryResult) => {
              console.log('changeRes:', JSON.stringify(res))
              if(res.matches){
                    AppStorage.set('breakPoint','MD')
              }
                  })
            listenerLG.on('change', (res: mediaquery.MediaQueryResult) => {
              console.log('changeRes:', JSON.stringify(res))
              if(res.matches){
                    AppStorage.set('breakPoint','LG')
              }
            })
}

// 4. 移除监听器
aboutToDisappear(): void {
    listenerXS.off('change')
    listenerSM.off('change')
        listenerMD.off('change')
        listenerLG.off('change')
}

build() {
    Column(){
      Text(this.breakPoint)
            .fontSize(20)
            .fontWeight(600)
    }
    .width('100%')
      .height('100%')
      .justifyContent(FlexAlign.Center)
        }
}


03.栅格结构

栅格体系以设备的水平宽度(屏幕密度像素值),单位vp)作为断点依据,界说设备的宽度类型,形成了一套断点规则。开发者可根据需求在差别的断点区间实现差别的页面结构结果
@Entry
@Component
struct Demo10 {
// 颜色数组
build() {
    Column() {
      // GridRow 默认支持 4 个断点
      //xs:(0vp<=width<320vp) 智能穿戴,比如手表
      //sm:(320vp<=width<600vp) 手机
      //md:(600vp<=width<840vp) 折叠屏
      //lg:(840vp<=width) 平板
      GridRow({
      // 4个断点 和默认的一样
      breakpoints: { value: ['320vp', '600vp', '840vp'] },
      gutter: 10, // 子组件间隙
      // columns: 12 // 统一设计列数 默认 12
      columns: {
          // 不同的断点分别设置不同的列数
          xs: 2, // 超小
          sm: 4, // 手机竖屏
          md: 8, // 折叠,手机横屏
          lg: 12 // 大屏
      }
      }) {
      ForEach(Array.from({ length: 2 }), (item: string, index: number) => {
          GridCol({
            // 每一行 2 个子元素,span 怎么设置(占的行数)
            // span: 2, // 占用列数 这样设置所有断点都是 2 列
            // 支持不同断点分别设置不同的占用列数
            span: {
            xs: 2,
            sm: 2,
            md: 2,
            lg: 4
            },
            // offset 偏移列数 默认为 0
            // offset: 1, // 偏移一列
            // 支持不同断点分别设置偏移不同的列数
            offset: {
            // xs: 2,
            // sm: 1
            }
          }) {
            Text(index.toString())
            .height(50)
          }
          .border({ width: 1 })
      })
      }
      .border({ width: 1, color: Color.Orange })
      .width('90%')
      .height('90%')
    }
    .width('100%')
    .height('100%')

}
}








免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
页: [1]
查看完整版本: 鸿蒙结构响应差别设备