android构建自定义的视图组件
2010-05-10 19:48:00 来源:WEB开发网在新类的构造方法中,得到超类所需的参数,并传递给超类的构造方法。另外,也可设置其他在这个心组件当中的视图组件,比如创建一个EditText和PopupList。注意,你也可以引入自己的参数和属性到xml文件中,这样会被取出并用于你的构造方法;
还可以创建事件监听器,用于容器中的视图组件,比如一个监听器方法,用于处理列表点击的监听器,更新EditText的文本内容;
创建自己的属性访问器和编辑器,比如,EditText的值可以在组件中初始设置,并能在需要的时候获取它的值;
在继承Layout类时,不需要覆盖onDraw()和onMeasure()方法,因为它们可能已经符合你的要求,当然,也可以覆盖它们实现自己特定的需求;
可能需要覆盖其他on…方法,比如onKeyDown()方法。
总之,使用Layout作为基础合成自定义的控件,有一些优点:
可以通过xml文件的方式声明指定的布局,和activity类似,或者可以通过编程的方式嵌入到你的代码中;
onDraw()方法和 onMeasure()等一般可适合需求,因此不必一定要覆盖它们;
可以快速的构建任何复杂的合成视图,重用它们为一个单一的组件。
合成控件的示例
在ApiDemos 示例中,演示了SpeechView,它继承了LinearLayout,并创建了一个组件,用于显示谈话中的引号。相关的类见:
samples/ApiDemos/src/com/example/android/apis/view/List4.java
samples/ApiDemos/src/com/example/android/apis/view/List6.java
代码
private class SpeechView extends LinearLayout {
public SpeechView(Context context, String title, String words) {
super(context);
this.setOrientation(VERTICAL);
// Here we build the child views in code. They could also have
// been specified in an XML file.
mTitle = new TextView(context);
mTitle.setText(title);
addView(mTitle, new LinearLayout.LayoutParams(
LayoutParams.FILL_PARENT, LayoutParams.WRAP_CONTENT));
mDialogue = new TextView(context);
mDialogue.setText(words);
addView(mDialogue, new LinearLayout.LayoutParams(
LayoutParams.FILL_PARENT, LayoutParams.WRAP_CONTENT));
更多精彩
赞助商链接