【android】自定义组件及其内组件大小的正确设置
2013-01-08 15:56
471 查看
一、自定义组件大小的设置
不管你怎么设置,自定义组件似乎总是match_parent。我们需要覆盖onMeasure方法,并在其内正确设置组件大小。
二、自定义组件内的组件的大小设置
除了覆盖onMeasure还需覆盖onLayout,在其内设置子元素的大小。
三、demo下载
四、联系方式
QQ:88433062
android交流群:33455842
不管你怎么设置,自定义组件似乎总是match_parent。我们需要覆盖onMeasure方法,并在其内正确设置组件大小。
@Override protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { //注意:为尽可能简洁本文只讨论EXACTLY和AT_MOST模式 int mode = MeasureSpec.getMode(widthMeasureSpec); if(mode == MeasureSpec.AT_MOST || mode == MeasureSpec.EXACTLY) { this.widthMeasureSpec = widthMeasureSpec; this.heightMeasureSpec = heightMeasureSpec; int width = MeasureSpec.getSize(widthMeasureSpec); int height = MeasureSpec.getSize(heightMeasureSpec); setMeasuredDimension(width, height); } else if(mode == MeasureSpec.UNSPECIFIED) { Log.d("WOGU", "mode=UNSPECIFIED"); super.onMeasure(widthMeasureSpec, heightMeasureSpec); } }
二、自定义组件内的组件的大小设置
除了覆盖onMeasure还需覆盖onLayout,在其内设置子元素的大小。
public class MyViewGroup extends ViewGroup { protected int widthMeasureSpec, heightMeasureSpec; @Override protected void onLayout(boolean changed, int left, int top, int right, int bottom) { if(changed) { View view = getChildAt(0); //measure将触发View的onMeasure。 //widthMeasureSpec包括尺寸和模式 //int width = MeasureSpec.getSize(widthMeasureSpec); //int height = MeasureSpec.getSize(heightMeasureSpec); //int mode = MeasureSpec.getMode(widthMeasureSpec); //mode的可能值MeasureSpec.AT_MOST,MeasureSpec.EXACTLY,MeasureSpec.UNSPECIFIED //这里只是简单的在onMeasure中记录widthMeasureSpec和heightMeasureSpec //其实MeasureSpec提供了根据sizet和模式合成widthMeasureSpec,heightMeasureSpec的方法 //int widthMeasureSpec = MeasureSpec.makeMeasureSpec(getWidth(), MeasureSpec.EXACTLY); //int heightMeasureSpec = MeasureSpec.makeMeasureSpec(getHeight(), MeasureSpec.EXACTLY); view.measure(widthMeasureSpec, heightMeasureSpec); view.layout(0, 0, getWidth(), getHeight()); } } @Override protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { this.widthMeasureSpec = widthMeasureSpec; this.heightMeasureSpec = heightMeasureSpec; ... } }
三、demo下载
四、联系方式
QQ:88433062
android交流群:33455842
相关文章推荐
- 自定义组件及其内组件大小的正确设置
- Android中自定义RatingBar实现星星大小,数量,间距等的设置
- Android Toast 设置到屏幕中间,自定义Toast的实现方法,及其说明
- Android之缩减apk大小[资源文件篇]:基于自定义Shape设置ShapeDrawable
- android 自定义TextView,设置DrawableLeft图片的大小
- Android 自定义RadioButton 实现文字上下左右方向的图片大小设置
- android中几个小程序,打开照相机,自定义相机,设置固定大小的视频播放
- Android里面动态修改一个已经设置大小的组件修改大小的流程:
- Android 自定义view-如何设置TextView drawableLeft 图片大小?
- Android Toast 设置到屏幕中间,自定义Toast的实现方法,及其说明
- Android_自定义控件之设置文本的大小
- Android开发中遇到的问题(一)——自定义videoview设置视频大小,实现上下黑边
- Android Toast 设置到屏幕中间,自定义Toast的实现方法,及其说明
- Android Toast 设置到屏幕中间,自定义Toast的实现方法,及其说明
- android自定义View设置大小的方法
- Android 自定义RadioButton 实现文字上下左右方向的图片大小设置
- Android自定义Dialog 软键盘、大小的设置
- Android中自定义RatingBar实现星星大小,数量,间距等的设置
- Android 自定义对话框,可设置大小和显示位置,并设置点击其他位置不消失
- android 设置自定义dialog大小无效果