在View中,onMeasure是父类调用,用来计算该View的显示空间,但是一直不理解,MeasureSpec.EXACTLY,MeasureSpec.AT_MOST,MeasureSpec.UNSPECIFIED是什么意思,做了一个简单测测试,让后Debug就明白了。代码如下:
@Override
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
setMeasuredDimension(measureWidth(widthMeasureSpec),measureHeight(heightMeasureSpec));
}
/**
* 高度
* @param heightMeasureSpec
* @return
*/
private int measureHeight(int heightMeasureSpec) {
int specMode = MeasureSpec.getMode(heightMeasureSpec);
int specSize = MeasureSpec.getSize(heightMeasureSpec);//父的空间大小
int h = bitmap.getHeight(); //图片的高度
int result = 0 ;
if (specMode == MeasureSpec.EXACTLY) {//父为 wrap_content
result = Math.min(h, specSize);
}else if(specMode == MeasureSpec.AT_MOST){//父为fill_parent
result = specSize;
} else {
result = specSize;
}
return result;
}
main.xml (使用两个layout,就是证明,size,不是整个,而是view的父容器的大小)
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="horizontal"
android:layout_width="fill_parent" //修改该值
android:layout_height="fill_parent" //修改该值
android:id="@+id/layoutId"
android:layout_weight="2"
/>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:id="@+id/layoutId1"
android:background="#FFFFFFCC"
android:layout_weight="1"
/>
</LinearLayout>
分享到:
相关推荐
Android View.onMeasure 方法是 View 类中非常重要的一个方法,它主要用于测量 View 的尺寸。在安卓系统中,View 在屏幕上显示之前需要经过测量(measure)和布局(layout)两个步骤。onMeasure 方法就是在测量步骤...
`TestCustomView5`可能是本文中示例或测试的自定义组件,它的具体实现可能涉及到了`onMeasure`方法的使用。通过查看源代码,我们可以更深入地理解`onMeasure`在实际项目中的应用。 总之,理解和掌握`onMeasure`对于...
总的来说,“View生命周期测试工程”是一个实用的学习资源,通过实际操作可以帮助开发者深入理解View如何在Android应用中创建、操作和销毁。无论是对初学者还是有经验的开发者,它都能提供有价值的实践经验和理论...
在Android开发中,自定义View是一项重要的技能,它允许开发者根据特定...通过理解和实践`ViewDemo`中的四种自定义View类型及其测试代码,开发者能够更好地掌握Android UI开发的精髓,从而提高应用的用户体验和创新性。
在`MyView`这个例子中,作者可能已经实现了上述的一些生命周期方法,并通过实际测试了解了它们的工作方式。通过分享这个示例,开发者可以学习如何创建和管理自定义View的生命周期,从而提升Android应用的用户体验和...
1. **自定义View的基本原理**:自定义View通常基于`View`或`ViewGroup`类进行扩展,通过重写关键方法如`onDraw()`、`onMeasure()`和`onLayout()`来实现绘图逻辑和布局管理。理解这些方法的生命周期和工作原理是创建...
在压缩包中的"grafika"可能是项目名称,Grafika是Android的一个开源项目,专注于展示和测试图形和媒体相关的API,这对于学习和理解Android的图形处理有极大的价值。它可能包含了自定义View的实例,展示如何使用...
在Android开发中,自定义View是一项重要的技能,它允许开发者根据需求创建独特的用户界面元素,以实现更加个性化和高效的设计。本项目中的"自定义View源代码"主要聚焦于一个名为"TopBar"的文件,这通常是应用顶部...
1. 测试`onMeasure()`的调用顺序,理解在复杂的View树中,各个View的测量顺序。 2. 验证不同MeasureSpec模式下,自定义View尺寸的计算是否正确。 3. 检查在`onMeasure()`中设置的尺寸是否符合预期,特别是在约束条件...
此外,这个例子还可能包含了如何组织代码结构、编写测试以及如何在博客中清晰地解释技术概念等内容。 总之,掌握自定义View的技巧对于Android开发者来说至关重要,它不仅可以满足特定的设计需求,还能提高应用的...
3. **测量**:在onMeasure()方法中测量View的大小,确保它能正确适应父View的约束。 4. **布局**:在onLayout()方法中确定子View的位置,如果有多个子View需要布局。 5. **事件处理**:覆写onTouchEvent()或使用...
4. **测量大小**:在自定义View中,需要重写`onMeasure()`方法来确定View的尺寸。这个方法需要遵循MeasureSpec规则,确保View在不同父容器和屏幕尺寸下能正确适应。 5. **触摸事件处理**:如果自定义View需要响应...
其中包括onMeasure()来测量View的大小、onSizeChanged()来获取View的宽高和进行额外数据计算、onDraw()来绘制View的内容。自定义View能够完全控制视图的绘制过程,包括在视图上绘制文本、图形以及响应用户事件等。 ...
3. **布局设计**:在`onMeasure()`方法中,你需要计算控件的大小,确保所有子View都能正确显示。在`onLayout()`方法中,布置子View的位置。 4. **绘制**:重写`onDraw()`方法,根据需求绘制控件的各个部分。可以...
在Android开发中,自定义View是一项重要的技能,它允许开发者根据特定需求创建独特且功能丰富的用户界面组件。本文将深入探讨如何在Android中实现自定义组合View,即结合多个基本View来构建复杂视图。 首先,理解...
在实际应用中,对自定义View进行全面测试至关重要。开发者需要确保在不同的设备、分辨率和Android版本上都能正常工作,同时使用调试工具如Hierarchy Viewer和Layout Inspector来检查绘制效果和性能问题。 总结,这...
7. **测试**:为了确保自定义View正常工作,我们需要创建一个测试项目,如`CouponDisplayViewTest`,在其中实例化并展示这个自定义View。这将帮助我们发现并修复可能存在的问题。 自定义View时,需要注意性能优化,...
7. **测试与调试**:确保在不同设备和屏幕尺寸上测试自定义View,检查其在各种情况下的表现和渲染效果。可以使用Android Studio的Layout Inspector工具进行可视化调试。 在提供的"RoundCorner"文件中,可能包含了...
在Android开发中,自定义View是一项重要的技能,它允许开发者根据特定需求创建独特且功能丰富的UI组件。这篇博客“安卓自定义View”深入探讨了如何在Android应用中创建自定义的视图,提供了详细的步骤和实践指导。...
在Android开发中,自定义View是一项非常重要的技能,它能够帮助开发者实现个性化界面,提供独特的交互体验。"Android-CustomView自定义View由菜鸟到大神"这一主题旨在引导开发者从初学者逐步进阶到专家水平,理解并...