- 浏览: 5853305 次
- 性别:
- 来自: 上海
-
文章分类
- 全部博客 (890)
- WindowsPhone (0)
- android (88)
- android快速迭代 (17)
- android基础 (34)
- android进阶 (172)
- android高级 (0)
- android拾遗 (85)
- android动画&效果 (68)
- Material Design (13)
- LUA (5)
- j2me (32)
- jQuery (39)
- spring (26)
- hibernate (20)
- struts (26)
- tomcat (9)
- javascript+css+html (62)
- jsp+servlet+javabean (14)
- java (37)
- velocity+FCKeditor (13)
- linux+批处理 (9)
- mysql (19)
- MyEclipse (9)
- ajax (7)
- wap (8)
- j2ee+apache (24)
- 其他 (13)
- phonegap (35)
最新评论
-
Memories_NC:
本地lua脚本终于执行成功了,虽然不是通过redis
java中调用lua脚本语言1 -
ZHOU452840622:
大神://处理返回的接收状态 这个好像没有监听到 遇 ...
android 发送短信的两种方式 -
PXY:
拦截部分地址,怎么写的for(int i=0;i<lis ...
判断是否登录的拦截器SessionFilter -
maotou1988:
Android控件之带清空按钮(功能)的AutoComplet ...
自定义AutoCompleteTextView -
yangmaolinpl:
希望有表例子更好。。。,不过也看明白了。
浅谈onInterceptTouchEvent、onTouchEvent与onTouch
除非你总是需要一个100×100像素的控件,否则,你必须要重写onMeasure。
onMeasure方法在控件的父元素正要放置它的子控件时调用。它会问一个问题,“你想要用多大地方啊?”,然后传入两个参数——widthMeasureSpec和heightMeasureSpec。
它们指明控件可获得的空间以及关于这个空间描述的元数据。
比返回一个结果要好的方法是你传递View的高度和宽度到setMeasuredDimension方法里。
接下来的代码片段给出了如何重写onMeasure。注意,调用的本地空方法是来计算高度和宽度的。它们会译解widthHeightSpec和heightMeasureSpec值,并计算出合适的高度和宽度值。
边界参数——widthMeasureSpec和heightMeasureSpec ,效率的原因以整数的方式传入。在它们使用之前,首先要做的是使用MeasureSpec类的静态方法getMode和getSize来译解,如下面的片段所示:
依据specMode的值,如果是AT_MOST,specSize 代表的是最大可获得的空间;如果是EXACTLY,specSize 代表的是精确的尺寸;如果是UNSPECIFIED,对于控件尺寸来说,没有任何参考意义。
当以EXACT方式标记测量尺寸,父元素会坚持在一个指定的精确尺寸区域放置View。在父元素问子元素要多大空间时,AT_MOST指示者会说给我最大的范围。在很多情况下,你得到的值都是相同的。
在两种情况下,你必须绝对的处理这些限制。在一些情况下,它可能会返回超出这些限制的尺寸,在这种情况下,你可以让父元素选择如何对待超出的View,使用裁剪还是滚动等技术。
接下来的框架代码给出了处理View测量的典型实现:
Android中的View.onMeasure()
http://blog.sina.com.cn/s/blog_4b650d650100nrhr.html
onMeasure方法在控件的父元素正要放置它的子控件时调用。它会问一个问题,“你想要用多大地方啊?”,然后传入两个参数——widthMeasureSpec和heightMeasureSpec。
它们指明控件可获得的空间以及关于这个空间描述的元数据。
比返回一个结果要好的方法是你传递View的高度和宽度到setMeasuredDimension方法里。
接下来的代码片段给出了如何重写onMeasure。注意,调用的本地空方法是来计算高度和宽度的。它们会译解widthHeightSpec和heightMeasureSpec值,并计算出合适的高度和宽度值。
@Override protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { int measuredHeight = measureHeight(heightMeasureSpec); int measuredWidth = measureWidth(widthMeasureSpec); setMeasuredDimension(measuredHeight, measuredWidth); } private int measureHeight(int measureSpec) { // Return measured widget height. } private int measureWidth(int measureSpec) { // Return measured widget width. }
边界参数——widthMeasureSpec和heightMeasureSpec ,效率的原因以整数的方式传入。在它们使用之前,首先要做的是使用MeasureSpec类的静态方法getMode和getSize来译解,如下面的片段所示:
int specMode = MeasureSpec.getMode(measureSpec); int specSize = MeasureSpec.getSize(measureSpec);
依据specMode的值,如果是AT_MOST,specSize 代表的是最大可获得的空间;如果是EXACTLY,specSize 代表的是精确的尺寸;如果是UNSPECIFIED,对于控件尺寸来说,没有任何参考意义。
当以EXACT方式标记测量尺寸,父元素会坚持在一个指定的精确尺寸区域放置View。在父元素问子元素要多大空间时,AT_MOST指示者会说给我最大的范围。在很多情况下,你得到的值都是相同的。
在两种情况下,你必须绝对的处理这些限制。在一些情况下,它可能会返回超出这些限制的尺寸,在这种情况下,你可以让父元素选择如何对待超出的View,使用裁剪还是滚动等技术。
接下来的框架代码给出了处理View测量的典型实现:
@Override protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { int measuredHeight = measureHeight(heightMeasureSpec); int measuredWidth = measureWidth(widthMeasureSpec); setMeasuredDimension(measuredHeight, measuredWidth); } private int measureHeight(int measureSpec) { int specMode = MeasureSpec.getMode(measureSpec); int specSize = MeasureSpec.getSize(measureSpec); // Default size if no limits are specified. int result = 500; if (specMode == MeasureSpec.AT_MOST) { // Calculate the ideal size of your // control within this maximum size. // If your control fills the available // space return the outer bound. result = specSize; } else if (specMode == MeasureSpec.EXACTLY) { // If your control can fit within these bounds return that value. result = specSize; } return result; } private int measureWidth(int measureSpec) { int specMode = MeasureSpec.getMode(measureSpec); int specSize = MeasureSpec.getSize(measureSpec); // Default size if no limits are specified. int result = 500; if (specMode == MeasureSpec.AT_MOST) { // Calculate the ideal size of your control // within this maximum size. // If your control fills the available space // return the outer bound. result = specSize; } else if (specMode == MeasureSpec.EXACTLY) { // If your control can fit within these bounds return that value. result = specSize; } return result; }
Android中的View.onMeasure()
http://blog.sina.com.cn/s/blog_4b650d650100nrhr.html
发表评论
-
某些android手机获取不到IMEI问题
2018-08-21 14:17 7684某些山寨机可能拿不到IMEI 如果非要IMEI可以模拟一个 ... -
APK安装成功后点击"打开"再按Home键应用会重启的问题
2018-08-21 14:13 2812安装系统SD卡里面的apk或者原有的程序更新版本的时候, ... -
使用volley链接Https地址时报SSLHandshakeException
2018-08-21 14:06 2218在真实设备上出现以下错误 ︰ Volley error: ... -
PhotoView+Viewpager双指缩放的时候出现pointerIndex out of range问题
2017-07-10 14:30 4305PhotoView+Viewpager开发图集效果的时候,在某 ... -
Android6.0权限封装
2017-04-01 12:04 1607简介 Android6.0中对权限分为了一般权限和危险权限。 ... -
实现点击 WebView 中的图片,调用原生控件展示图片
2017-04-01 11:14 2853现在有很多时候,我们的 App 都进行了混合开发,而最简单,最 ... -
Android 方法引用数超过 65535 优雅解决
2017-03-31 09:37 1599随着应用不断迭代更新,业务线的扩展,应用越来越大(比如:集成了 ... -
android引用资源@与属性?备忘单
2017-03-30 10:09 1321几天前我偶然发现了我A ... -
ViewPager 与SwipeRefreshLayout,RecyclerView,ScrollView滑动冲突解决方法
2017-03-30 09:55 6609ViewPager 作为一个横向滚动的控件, 在 ViewGr ... -
Android中一些你可能没注意的小效果实现
2017-02-15 21:09 0http://www.see-source.com/blog/ ... -
Android热修复:Andfix和Hotfix,两种方案的比较与实现
2017-02-15 21:00 0http://www.see-source.com/blog/ ... -
Android 从网页中跳转到本地App
2017-01-11 09:27 1913我们在使用微信、QQ、京东等app的时候,会发现有时候通过他们 ... -
Activity的启动模式和onNewIntent
2016-12-28 09:10 1365一、启动模式介绍 启� ... -
android5.0使用Notification报RemoteServiceException的解决办法
2016-08-31 16:13 11599有时android5.0下使用Notification会报如下 ... -
RecyclerView 中的 item 如何居中问题
2016-05-18 09:52 12636一个很简单的Item布局,我只要让它由上而下排列,文字居中 ... -
sqlite3:not found 解决方法
2015-12-08 16:03 2586最最最重要,先root你的手机吧 sqlite3 为一个可 ... -
隐藏底部虚拟键NavigationBar实现全屏
2015-10-08 17:20 9902import android.app.Activity; ... -
服务端执行慢或网络延迟时,Volley多次发送请求的问题
2015-07-27 15:40 7053原文: Android Volley double post ... -
如何获取 Android 设备的CPU核数、时钟频率以及内存大小
2015-06-30 17:04 4429原帖: http://www.jianshu.com/p/f7 ... -
android点滴5
2015-04-10 17:32 2085一些小效果的实现 http://www.see-source. ...
相关推荐
在Android开发中,`onMeasure()`方法是布局和视图尺寸计算的核心,它负责确定一个View的精确宽度和高度。本文将深入解析`onMeasure()`的工作原理,通过一个实例来帮助理解这一关键过程。 首先,`onMeasure()`方法在...
Android View.onMeasure方法详解及实例 View在屏幕上显示出来要先经过measure(计算)和layout(布局). 1、什么时候调用onMeasure方法? 当控件的父元素正要放置该控件时调用.父元素会问子控件一个问题,“你想...
"覆写onMeasure例子"这个标题指的是在自定义View时,我们需要重写`onMeasure()`方法来精确控制视图的大小。这个过程是Android布局系统的关键部分,确保了每个View能够正确地在屏幕上占据其应有的空间。 在Android中...
2、使用单个ListView的addHeaderView()方法(给listview设置顶部固定的一个view) 评价:比较简便的方法,但是如果顶部布局需要监听滑动事件,也不可取。 3、使用LinearLayout取代ListView(重写LinearLayout) ...
`onMeasure`方法是每个View都必须重写的方法,用于确定View自身的宽高。它需要调用`setMeasuredDimension`来设定测量结果,通常根据MeasureSpec(测量规格)来进行。MeasureSpec包含了父View对子View的尺寸约束,...
`onMeasure`方法在Android的View类中被定义,它是测量组件大小的核心方法。当一个View或ViewGroup需要确定其子视图的尺寸时,会调用这个方法。通常,自定义组件需要重写`onMeasure`以确保它们能正确地根据内容或特定...
- 1.1.3 View 类方法及接口详细介绍 - 1.1.4 Android 中 View 类相关常用控件举例 - 1.2 View 类的层次结构关系 2. Android 的屏幕元素体系 ViewGroup - 2.1 Android GUI 程序的屏幕的体系结构 - 2.1.1 体系...
2. **onMeasure()**:在这个方法中,我们需要遍历所有子View,根据它们的权重或者固定尺寸来计算每个子View的测量宽度和高度。同时,考虑到伸缩效果,可以为每个子View设置一个最小和最大尺寸。 3. **onLayout()**...
开发者可以通过重写View或ViewGroup类的onMeasure、onLayout、onDraw方法来实现自定义的View或ViewGroup。下面我们将详细介绍View和ViewGroup的工作原理和实现方法。 View的工作原理 ------------- View的工作原理...
下面将详细介绍`View`类的基本使用和实例。 1. **创建自定义View** 在Android中,你可以通过继承`View`或其子类(如`TextView`, `Button`等)来创建自定义视图。首先,你需要创建一个新的Java类,然后重写关键方法...
- `onMeasure()`方法用于计算View的尺寸,必须调用`setMeasuredDimension()`设置测量结果。 2. **绘制基础**: - 使用`Canvas`对象进行绘制,包括画线`drawLine()`, 画圆`drawCircle()`, 画矩形`drawRect()`等...
Android自定义View绘制的方法及过程是Android开发中非常重要的一部分,本文将详细介绍Android自定义View绘制的方法及过程,包括onSizeChanged、onDraw、onMeasure顺序的解释。 在Android中,自定义View的绘制过程...
下面着重介绍 View 类: 自定义 View 的常用方法有: * onFinishInflate():当 View 中所有的子控件均被映射成 xml 后触发 * onMeasure(int, int):确定所有子元素的大小 * onLayout(boolean, int, int, int, int)...
在 onMeasure() 方法中,还需要调用孩子的 measure() 方法,来测量出 view 的大小。父 view 使用 width 参数和 height 参数来提供约束信息。实际上,view 的测量工作在 onMeasure() 方法中完成。 onLayout() 方法:...
在`onMeasure()`方法中,View会根据这些规格计算自己的实际大小。对于ViewGroup,如LinearLayout,它需要考虑自身以及所有子View的大小,因此通常需要重写`onMeasure()`来执行复杂的测量逻辑。基类View的`onMeasure...
- `onMeasure()`方法用于计算自定义View的大小,需要考虑父View的约束和自身的布局参数。 - `onLayout()`方法用于确定子View的位置。 7. **性能优化**: - 使用`canvas.save()`和`canvas.restore()`来减少不必要...
4. 可能需要重写onMeasure()方法,以确定View的尺寸,遵循MeasureSpec规则。 5. 对于交互性,可能需要覆盖onTouchEvent()来处理触摸事件。 自定义View时,你可能会遇到以下复杂实现: 1. 属性动画和视图动画:为了...
`onMeasure()`方法是自定义ViewGroup时必须重写的一个核心方法,它负责测量并确定子View的大小。本文将深入解析如何在继承ViewGroup的子类中正确地重写`onMeasure()`方法。 `onMeasure()`方法的主要任务是计算出...
测量 摆放 绘制 * measure -> layout -> draw * | | | * onMeasure -> onLayout -> ... * onMeasure() (指定自己的宽高, 所有子View的宽高)-> onLayout() (摆放所有子View) -> onDraw() (绘制内容)