时间:2021-05-20
前言
我们平时在开发中的过程中通常都会获取屏幕或者 widget 的宽高用来做一些事情,在 Flutter 中,我们有两种方法来获取 widget 的宽高。
MediaQuery
一般情况下,我们会使用如下方式去获取 widget 的宽高:
但是如果不注意,这种写法很容易报错,例如下面的写法就会报错:
在代码中,我们是想获取屏幕的宽和高,然后将屏幕宽高的一半分别赋值给 Container 的宽和高,但上述代码并不能成功运行,会报如下错误:
flutter: The following assertion was thrown building GetWidgetWidthAndHeiget(dirty):
flutter: MediaQuery.of() called with a context that does not contain a MediaQuery.
flutter: No MediaQuery ancestor could be found starting from the context that was passed to MediaQuery.of().
flutter: This can happen because you do not have a WidgetsApp or MaterialApp widget (those widgets introduce
flutter: a MediaQuery), or it can happen if the context you use comes from a widget above those widgets.
从错误异常中我们可以大概了解到有两种情况会导致上述异常:
我们上述的代码很显然是属于第一种情况,也就是说我们在使用 MediaQuery.of(context) 的地方并没有一个 WidgetsApp or MaterialApp 来提供数据。
解决方法就是将 MediaQuery.of(context) 挪到 MaterialApp 内,如下:
运行效果及输出如下:
flutter: width is 414.0; height is 896.0
上述代码中,我们获取的是 MaterialApp 的宽高,也就是屏幕的宽高
那么如果我们要需要知道上述红色的 Container 容器的宽高怎么办呢?这里我们可以使用 GlobalKey
GlobalKey
使用 GlobalKey 的步骤如下:
修改过后的 HomePage 代码如下:
上述代码中,我们将声明的 globalKey 设置给了 Container , 当我们点击页面中的 FloatingActionButton 的时候,就会使用 globalKey 来获取 Container 的宽高,也就是_getWH() 中执行的代码。
运行结果及输出如下:
flutter: Container widht is 207.0, height is 448.0
如果错误,还请指出,谢谢
完整源码
参考链接
总结
以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,谢谢大家对的支持。
声明:本页内容来源网络,仅供用户参考;我单位不保证亦不表示资料全面及准确无误,也不保证亦不表示这些资料为最新信息,如因任何原因,本网内容或者用户因倚赖本网内容造成任何损失或损害,我单位将不会负任何法律责任。如涉及版权问题,请提交至online#300.cn邮箱联系删除。
本文主要介绍了Android获取屏幕的多种宽高信息的示例代码,分享给大家,具体如下:包含的宽高信息如下图所示:在模拟器上获取到的数据:08-2607:19:32
screen对象获取屏幕的高宽(分辨率)screen.width//屏幕的宽screen.height//屏幕的高screen.availWidth//屏幕可用
screen对象获取屏幕的高宽(分辨率)screen.width//屏幕的宽screen.height//屏幕的高screen.availWidth//屏幕可用
老风格,废话不多说了,直接给大家贴android获取屏幕宽高的代码了。主要代码:packagecom.km.screeninfo;importandroid.o
在开发中我们会遇到各种需要获得屏幕参数的场景,当中也有不少坑,所以现在就记录一下这些参数的获取方式。以免再入坑。物理屏幕宽高一、底部没有虚拟按键这里获取到的宽高