Android View何时能拿到宽高的值

Android View何时能拿到宽高的值,第1张

一个View或ViewGroup中什么什么时候能拿到宽高的值?

width 表示 View 在屏幕上可显示的区域大小;

measuredWidth 表示 View 的实际大小,包括超出屏幕范围外的尺寸;

甚至有这样的公式总结到:

getMeasuredWidth() = visible width + invisible width

getMeasuredWidth() 在执行setMeasuredDimension(一般在onMeasure方法中执行)后才有值;

getWidth()在onLayout方法执行后才有值。

Constructor : 构造方法,View初始化的时候调用,在这里是无法获取其子控件的引用的更加无法获取宽高了

onFinishInflate : 当布局初始化完毕后回调,在这里可以获取所有直接子View的引用,但是无法获取宽高

onMeasure : 当测量控件宽高时回调,当调用了requestLayout()也会回调onMeasure在这里一定可以通过getMeasuredHeight()和getMeasuredWidth()来获取控件的高和宽,但不一定可以通过getHeight()和getWidth()来获取控件宽高,因为getHeight()和getWidth()必须要等onLayout方法回调之后才能确定

onSizeChanged : 当控件的宽高发生变化时回调,和onMeasure一样,一定可以通过getMeasuredHeight()和getMeasuredWidth()来获取控件的高和宽,因为它是在onMeasure方法执行之后和onLayout方法之前回调的

onLayout : 当确定控件的位置时回调,当调用了requestLayout()也会回调onLayout在这里一定可以通过getHeight()和getWidth()获取控件的宽高,同时由于onMeasure方法比onLayout方法先执行,所以在这里也可以通过getMeasuredHeight()和getMeasuredWidth()来获取控件的高和宽

addOnGlobalLayoutListener : 当View的位置确定完后会回调改监听方法,它是紧接着onLayout方法执行而执行的,只要onLayout方法调用了,那么addOnGlobalLayoutListener的监听器就会监听到在这里getMeasuredHeight()和getMeasuredWidth()和getHeight()和getWidth()都可以获取到宽高

onWindowFocusChanged : 当View的焦点发送改变时回调,在这里getMeasuredHeight()和getMeasuredWidth()和getHeight()和getWidth()都可以获取到宽高Activity也可以通过重写该方法来判断当前的焦点是否发送改变了;需要注意的是这里View获取焦点和失去焦点都会回调

(部分内容参考于网络,如有不妥,请联系删除~)

android 取得屏幕物理宽高的方法为:

1、在一个Activity的onCreate方法中,写入如下代码:

DisplayMetrics metric = new DisplayMetrics();

getWindowManager()getDefaultDisplay()getMetrics(metric);

int width = metricwidthPixels; // 屏幕宽度(像素)

int height = metricheightPixels; // 屏幕高度(像素)

float density = metricdensity; // 屏幕密度(075 / 10 / 15)

int densityDpi = metricdensityDpi; // 屏幕密度DPI(120 / 160 / 240)

2、但是,需要注意的是,在一个低密度的小屏手机上,仅靠上面的代码是不能获取正确的尺寸的。比如说,一部240x320像素的低密度手机,如果运行上述代码,获取到的屏幕尺寸是320x427。因此,研究之后发现,若没有设定多分辨率支持的话,Android系统会将240x320的低密度(120)尺寸转换为中等密度(160)对应的尺寸,这样的话就大大影响了程序的编码。所以,需要在工程的AndroidManifestxml文件中,加入supports-screens节点,具体的内容如下:

<supports-screens

android:smallScreens="true"

android:normalScreens="true"

android:largeScreens="true"

android:resizeable="true"

android:anyDensity="true" />

题主可以先继承布局类,如另写一个类继承LineatLayout ,然后实现onMeasure()方法,在方法里面获取布局的宽度和高度,再根据获取到的宽度和高度 设置控件内元素的宽高,比如元素Title的高 TitleHeight = measureHeight 05 ,意思是占布局高的二分之一,这时就可以整体缩放了。

onmeasure()内获取宽高的方法:

int measureWidth = measureWidth(widthMeasureSpec);

int measureHeight = measureHeight(heightMeasureSpec);

其中宽度的函数:

private int measureWidth(int widthMeasureSpec) {

int specMode = MeasureSpecgetMode(widthMeasureSpec);

int specSize = MeasureSpecgetSize(widthMeasureSpec);

int result = 500;

if (specMode == MeasureSpecAT_MOST) {

result = specSize;

} else if (specMode == MeasureSpecEXACTLY) {

result = specSize;

}

return result;

}

用js获取呗,你获取不到应该是你的div没设置宽高,而你用documentgetElementByID("ObjID")styleheight|width来获取的吧,这样只能获取设定了宽高的对象 没有设定的需要用offsetWidth|offsetHeight来获取,比如:documentgetElementByID("ObjID")offsetWidth|offsetHeight

<div id="cao" style="float:left">asdasd<br />asdsadasd</div>

<script>alert(documentgetElementById("cao")offsetWidth)</script>

如果这样获取不到,老子把电脑吃了,你TM问题又不叙述清楚,最TM烦你这种白痴问问题了,天知道你用了什么变态方法

transform本身就是变形属性,不会改变元素的位置大小等,布局不发生变化,只是对元素进行变换。

所以js获取的宽高是元素未变形前的值,需要获取缩放后的宽高,可以用元素的宽高乘以缩放值。

宽:gameObjectGetComponent<RectTransform>()rectwidth

高:gameObjectGetComponent<RectTransform>()rectheight

GetComponent<RectTransform>()sizeDelta

或者GetComponent<RectTransform>()rectsize

延展:

用户界面(User Interface)是指对软件的人机交互、 *** 作逻辑、界面美观的整体设计

用户界面是介于用户与硬件而设计彼此之间交互沟通相关软件,目的在于让用户高效完成工作

用户界面定义广泛,包含了人机交互与图形用户接口,凡参与人类与机械的信息交流的领域都存在着用户界面

好的软件不仅要体现个性有品位,而且要求 *** 作变得舒适、简单、自由、充分体现软件的定位和特点

用户界面( User Interface,简称 UI,亦称 使用者界面)是系统和用户之间进行交互和信息交换的媒介,它实现信息的内部形式与人类可以接受形式之间的转换

用户界面是介于用户与硬件之间,为彼此之间交互沟通而设计的相关软件,使得用户能够方便有效地去 *** 作硬件以达成双向之交互,完成所希望的工作

用户界面定义广泛,包含了人机交互与图形用户界面,凡参与人类与机械的信息交流的领域都存在着用户界面

用户和系统之间一般用面向问题的受限自然语言进行交互。目前有系统开始利用多媒体技术开发新一代的用户界面

随着“UI”热的到来,近几年国内很多从事手机, 软件,网站, 增值服务等企业和公司都设立了这个部门

还有很多专门从事UI设计的公司也应运而生。软件UI设计师的待遇和地位也逐渐上升

getMeasureWidth():测量宽度,onMeasure之后即可获得

getWidth():实际显示宽度,onLayout之后可获得

测量宽度和实际宽度,几乎所有情况相等,特殊情况除外如:多次测量只有最后一次相等,或重写onLayout方法了

好习惯是在onLayout方法中获取测量的最终宽高

在onCreate或者onResume中获取getMeasureWidth是不可行的。

通过手动对View进行measure来得到View的宽高,但需要根据不同情况来进行处理

原文: >

以上就是关于Android View何时能拿到宽高的值全部的内容,包括:Android View何时能拿到宽高的值、android 取得屏幕物理宽高、求一个实现android布局文件整体缩放的实现方法等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/10176797.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-06
下一篇 2023-05-06

发表评论

登录后才能评论

评论列表(0条)

保存