Android视角看鸿蒙第六课(module.json5中的各字段含义之pages)designWidth的用法

Android视角看鸿蒙第六课(module.json5中的各字段含义之pages)

导读

前面几篇文章,我们陆续分析了entry->src->main下的module.json5中的各个字段的含义及作用。目前剩余pages和abilities两个字段,本篇文章一起来了解pages。
过程有错误,一定要看到最后

pages

官方文档

在这里插入图片描述
在这里插入图片描述

字段定义

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
可以看到pages的值是String,通过正则要求值的格式必须是
$profile: 开始的,作用是定义了所有page的路径

需要注意的是官方文档中说明除默认存在的src外,还可以存在window标签(可缺省),缺省状态下designWidth默认为720,目测类似于autosize.

思考

1、page的路径仅仅是说明,还是必须声明?
2、window下的designWidth的作用
3、autoDesignWidth的作用

尝试

1、page的路径仅仅是说明,还是必须声明?

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
EntryAbility目前是程序的入口,EntryAbility加载了pages/Index, pages/Index在main_pages.json中的src下存在。
现在把main_pages.json中的pages/Index注释看看会发生什么。
在这里插入图片描述
报错了,json不允许注释
直接删除
在这里插入图片描述
ok,有警告但不报错。
运行看看效果.
在这里插入图片描述
日志显示的是成功的,但是界面无内容.
在这里插入图片描述
改回来,再上个正常的
在这里插入图片描述

结论

被调用的page必须在pages所配置的profile中声明,未声明时不会报错,不影响运行,不会闪退但加载不出内容且
在这里插入图片描述

1.1 重复声明会如何

突发奇想,不声明不行,那么如果声明了两个会如何
在这里插入图片描述
有警告,运行看看
在这里插入图片描述
ok,没有什么问题

结论

重复声明会有警告,建议删除重复项,虽然不影响运行

2、window下的designWidth的作用

默认是没有这个值的,我们先手写一个这个字段,看看字段描述
在这里插入图片描述
Defines window-related configurations. This attribute is not supported by devices running the OHOS.
定义窗口属性,但OHOS不支持。
在这里插入图片描述
看看其他同学对于OHOS的描述,简单来说就是和鸿蒙OS不是一回事。 先不管他。

根据这个我们定义了一个designWidth,和缺省值一致,为720
在这里插入图片描述
同时,也看下designWidth的字段描述
在这里插入图片描述
Indicates the baseline width for page design, in pixels. The size of an element is scaled by the actual device width. This label is an integer.
指示页面设计的基线宽度(以像素为单位)。元素的大小按实际设备宽度进行缩放。此标签是一个整数。

为了更好的看出效果,我们修改一下page/index中的宽度和背景色
在这里插入图片描述
看效果
在这里插入图片描述

虚拟机效果不太对,理论上应该正好全屏,看看真机。

真机效果一致,这是什么原因呢?

继续修改designWidth的值,为72,相比之前缩小10倍,视图应该放大10倍才对
在这里插入图片描述
看看效果
无任何变化-_
郁闷了

结论

并无任何影响,可能我的方向是错误的,想参考一下其他同学的帖子,也未能发现有效的资料。有其他想法的同学欢迎反馈吧。

3、autoDesignWidth的作用

看一下autoDesignWidth的值

在这里插入图片描述

在这里插入图片描述
按照文档说明,当autoDesignWidth=true时,designWidth设置的值会被忽略,将会自动计算的得出。
看看效果
在这里插入图片描述
依然一致,无任何变化
在这里插入图片描述
研究了半天,在这个目录下看到了window的更多说明,疑似专用于类web开发范式
基于类web开发范式,我找到了这个
在这里插入图片描述
Stage模型下的应用或服务的页面仅支持声明式开发范式(推荐),Stage模型下的卡片支持声明式和类web两种开发范式。

上个官方链接

结论(错误的)

在Stage模型下,确定window下的designWidth及autoDesignWidth字段,无任何作用。

修正

发布之后其实我是很放心的,所以我去研究UI了,我很好奇,
我们在上述篇幅中修改的
width(720)
中的720是什么单位,如何保证屏幕兼容的。
我去看文档,无意中看到了这个
在这里插入图片描述

我门上述的720,默认使用的vp,等同于Android中的dp
而lpx是和designwidth有关系的

下图是designWidth和lpx的使用方式
在这里插入图片描述

在这里插入图片描述

结论

designWidth类似于autosize,可以等比例还原设计图,但是组件的width默认输入number是Vp单位的,等同于DP,不受designWidth影响,必须通过==width(px2vp(lpx2px(70)))==将lpx转换为px,暂未发现lpx直接转vp的办法。
所以designWidth和autoDesignWidth都是有效的,只是需要配合**px2vp(lpx2px(70)**使用

  • 14
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Caliburn.Micro是一个轻量级的MVVM框架,它可以帮助我们更好地实现WPF应用程序的开发。下面是一些关于Caliburn.Micro框架的介绍和示例: 1.使用Caliburn.Micro实现MEF插件化开发,根据dll插件目录动态加载程序集和主程序的Tab页。 ```csharp // 在App.xaml.cs添加以下代码 protected override void OnStartup(StartupEventArgs e) { base.OnStartup(e); // 创建插件管理器 var pluginManager = new PluginManager(); // 加载插件 pluginManager.LoadPlugins(); // 创建主窗口 var mainWindowViewModel = new MainWindowViewModel(pluginManager); // 显示主窗口 var mainWindow = new MainWindow(); mainWindow.DataContext = mainWindowViewModel; mainWindow.Show(); } ``` 2.CM框架搭建、事件发布与订阅、log打印、ioc容器、Conductor的用法,框架下的命名约定以及事件绑定、Emgucv进行模板匹配、右键菜单、单例模式等等。 ```csharp // ViewModelBase.cs public abstract class ViewModelBase : Screen { protected readonly IEventAggregator _eventAggregator; protected readonly ILog _logger; public ViewModelBase(IEventAggregator eventAggregator, ILog logger) { _eventAggregator = eventAggregator; _logger = logger; } // 发布事件 protected void Publish<TEvent>(TEvent @event) { _eventAggregator.PublishOnUIThread(@event); } // 订阅事件 protected void Subscribe<TEvent>(Action<TEvent> action) { _eventAggregator.Subscribe(action, ThreadOption.UIThread); } // 打印日志 protected void Log(string message) { _logger.Info(message); } } // ShellViewModel.cs public class ShellViewModel : Conductor<object>.Collection.OneActive { private readonly IWindowManager _windowManager; private readonly IEventAggregator _eventAggregator; private readonly ILog _logger; private readonly IContainer _container; public ShellViewModel(IWindowManager windowManager, IEventAggregator eventAggregator, ILog logger, IContainer container) { _windowManager = windowManager; _eventAggregator = eventAggregator; _logger = logger; _container = container; // 订阅事件 _eventAggregator.Subscribe(this); } // 打开新窗口 public void OpenWindow() { var viewModel = _container.Resolve<NewWindowViewModel>(); _windowManager.ShowDialog(viewModel); } // 关闭窗口 public void CloseWindow() { TryClose(); } // 处理事件 public void Handle(MyEvent @event) { // 处理事件 } } // ShellView.xaml <UserControl x:Class="MyApp.Views.ShellView" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:cal="http://www.caliburnproject.org" xmlns:d="http://schemas.microsoft.com/expression/blend/2008" xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" mc:Ignorable="d" d:DesignHeight="450" d:DesignWidth="800"> <Grid> <Grid.RowDefinitions> <RowDefinition Height="Auto" /> <RowDefinition Height="*" /> </Grid.RowDefinitions> <Menu Grid.Row="0"> <MenuItem Header="File"> <MenuItem Header="Open" cal:Message.Attach="OpenWindow" /> <MenuItem Header="Close" cal:Message.Attach="CloseWindow" /> </MenuItem> </Menu> <ContentControl Grid.Row="1" cal:View.Model="{Binding ActiveItem}" /> </Grid> </UserControl> ```

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值