开发手册 欢迎您!
软件开发者资料库

Android - 自定义组件

Android自定义组件 - 学习Android编程以及如何开发Android手机和ipad应用程序,从环境设置,应用程序组件,活动生命周期,服务生命周期,应用程序架构,发布应用程序,调试应用程序,处理事件,布局,菜单,用户界面控件开始,样式和主题,处理轮换,字体管理,发送电子邮件,数据存储,管理媒体,发送短信,电话。

在预构建组件中实现自己的组件,扩展子类具有自己定义的类

Android提供了一个很棒的预构建小部件列表,如Button,您可以直接在Android应用程序开发中使用TextView,EditText,ListView,CheckBox,RadioButton,Gallery,Spinner,AutoCompleteTextView等,但是当您对任何可用小部件的现有功能不满意时,可能会出现这种情况. Android为您提供了创建自定义组件的方法,您可以根据自己的需要对其进行自定义.

如果您只需对现有小部件或布局进行小幅调整,则可以简单地进行子类化小部件或布局并覆盖其方法,这将使您可以精确控制屏幕元素的外观和功能.

本教程将向您介绍如何创建自定义视图并在应用程序中使用它们使用简单易行的步骤.

Custom

自定义视图层次结构中自定义组件的示例

创建简单自定义组件

Step描述
1您将使用Android studio IDE创建Android应用程序并将其命名为在 com.example.it13527.myapplication 下的 myapplication ,如 Hello World示例章节中所述.
2创建XML res/values/attrs.xml 文件,用于定义新属性及其数据类型.
3创建 src/mainactivity.java 文件并添加代码以定义自定义组件
4修改 res/layout/activity_main.xml 文件并添加代码以创建彩色复合视图实例以及一些默认属性和新属性.
5运行应用程序以启动Android模拟器,并验证应用程序中所做更改的结果.

在您中创建名为attrs.xml的以下属性文件r res/values文件夹.

                                    

将活动使用的布局文件更改为以下内容.

      

为您的复合视图创建以下名为timeview的java文件.

package com.example.it13527.myapplication;import java.text.SimpleDateFormat;import java.util.Calendar;import android.content.Context;import android.content.res.TypedArray;import android.graphics.Color;import android.util.AttributeSet;import android.widget.TextView;public class TimeView extends TextView {   private String titleText;   private boolean color;   public TimeView(Context context) {      super(context);      setTimeView();   }   public TimeView(Context context, AttributeSet attrs) {      super(context, attrs);      // retrieved values correspond to the positions of the attributes         TypedArray typedArray = context.obtainStyledAttributes(attrs,             R.styleable.TimeView);      int count = typedArray.getIndexCount();      try{                  for (int i = 0; i < count; ++i) {                        int attr = typedArray.getIndex(i);            // the attr corresponds to the title attribute            if(attr == R.styleable.TimeView_title) {                              // set the text from the layout               titleText = typedArray.getString(attr);               setTimeView();            } else if(attr == R.styleable.TimeView_setColor) {               // set the color of the attr "setColor"               color = typedArray.getBoolean(attr, false);               decorateText();            }         }      }              // the recycle() will be executed obligatorily      finally {         // for reuse         typedArray.recycle();      }   }   public TimeView(Context context, AttributeSet attrs, int defStyle) {      super(context, attrs, defStyle);      setTimeView();   }   private void setTimeView() {      // has the format hour.minuits am/pm      SimpleDateFormat dateFormat = new SimpleDateFormat("hh.mm aa");      String time = dateFormat.format(Calendar.getInstance().getTime());            if(this.titleText != null )      setText(this.titleText+" "+time);      else         setText(time);   }   private void decorateText() {      // when we set setColor attribute to true in the XML layout      if(this.color == true){         // set the characteristics and the color of the shadow         setShadowLayer(4, 2, 2, Color.rgb(250, 00, 250));         setBackgroundColor(Color.CYAN);      } else {         setBackgroundColor(Color.RED);      }   }}

将您的主要活动java文件更改为以下代码并运行您的应用程序.

package com.example.it13527.myapplication;import android.os.Bundle;import android.widget.TextView;import android.app.Activity;public class MainActivity extends Activity {   @Override   protected void onCreate(Bundle savedInstanceState) {      super.onCreate(savedInstanceState);      setContentView(R.layout.activity_main);      TextView simpleText = (TextView) findViewById(R.id.simple);      simpleText.setText("That is a simple TextView");   }}

正在运行的应用程序应如下所示.

自定义