android构建自定义的视图组件
2010-05-10 19:48:00 来源:WEB开发网onMeasure() 方法有些麻烦。该方法是在容器和自定义组件之间渲染的重要部分。该方法覆盖,要高效率的和精确的报告被包含区域的测量值。
总的来看,实现onMeasure()方法类似如下步骤:
调用已经覆盖的onMeasure()方法,传递长和宽规范参数;
自定义组件在onMeasure()方法中计算需要渲染的组件的长和宽,应该在规范参数的范围内;
一旦长和宽计算出来,必须调用setMeasuredDimension(int width, int height)方法,这步失败会导致异常的抛出。
一个自定义视图的示例
自定义视图的示例,见:LabelView
该示例演示了一些自定义组件的不同方面:
继承View类,用于完全自定义组件;
参数化的构造方法,提供更多的参数,定义在xml文件中;
标准的公开方法,用于设置标签,比如setText()方法等;
覆盖onMeasure方法确定渲染的组件尺寸;
覆盖onDraw方法,在提供的canvas中画标签。
可以找到对示例的一些使用,在custom_view_1.xml文件中。
该示例运行效果:
android示例是混在一起的,比较乱,我这里改写了一下,只有相关示例的代码和配置。看起来比较简单:
http://easymorse.googlecode.com/svn/tags/android.customer.view.demo_1.0
合成控制器
合成控制器,即不是完全自定义一个新的视图组件,而是,将现有的原子级控制器(控件?)或者视图组件组合在一起,处理共同的业务逻辑。比如,一个combo box可以被看做,一个单行的EditText和一个相邻的按钮,带一个弹出列表。
在android中还有很多其他的示例,比如Spinner,AutoComleteTextView。
创建合成组件的步骤:
通常的起始步骤是,创建某种类型的Layout,即创建一个类继承一个Layout。比如上述的combo box,可能会使用到基于垂直布局的LinearLayout。其他布局也可以嵌套在其中,因此合成组件可以任意复杂结构。和activity类似,你可以用基于xml的声明方式创建容器组件,也可以嵌入到程序代码中;
更多精彩
赞助商链接