zoukankan      html  css  js  c++  java
  • Android 自定义控件

    (属性其实就一是一对Key-value的玩意,然后在代码中对这些进行控制,Android的AttributeSet 让我想起了dojo中的玩意,这个其实就是一个键值对的集合,在构造函数中传入的……)

    所谓自定义控件(或称组件)也就是编写自己的控件类型,而非Android中提供的标准的控件,如TextView,CheckBox等等.不过自定义的控件一般也都是从标准控件继承来的,或者是多种控件组合,或者是对标准控件的属性进行改变而得到的自己满意的控件.

        自定义控件可能会有很多种方法,这里只介绍我要介绍的方法.

         在这种方法中,大概的步骤是这样的

        1.我们的自定义控件和其他的控件一样,应该写成一个类,而这个类的属性是是有自己来决定的.

        2.我们要在res/values目录下建立一个attrs.xml的文件,并在此文件中增加对控件的属性的定义.

        3.使用AttributeSet来完成控件类的构造函数,并在构造函数中将自定义控件类中变量与attrs.xml中的属性连接起来.

        4.在自定义控件类中使用这些已经连接的属性变量.

        5.将自定义的控件类定义到布局用的xml文件中去.

        6.在界面中生成此自定义控件类对象,并加以使用.

     

        //---------------------------------------------------------------------------------

        1. 定义自己的控件类:--------------------------------------------代码1.

        package com.android.tutor;  
        import android.content.Context;  
        import android.content.res.TypedArray;  
        import android.graphics.Canvas;  
        import android.graphics.Color;  
        import android.graphics.Paint;  
        import android.graphics.Rect;  
        import android.graphics.Paint.Style;  
        import android.util.AttributeSet;  
        import android.view.View;  

     
        public class MyView extends View
        {  
            private Paint mPaint;  
            private Context mContext;  
            private static final String mString = "Welcome to Mr Wei's blog";  
          
            public MyView(Context context)
            {  
                super(context);  
                mPaint = new Paint();  
            }  

     
            public MyView(Context context,AttributeSet attrs)  
            {  
                super(context,attrs);  
                mPaint = new Paint();  
              
                TypedArray a = context.obtainStyledAttributes(attrs,R.styleable.MyView);             
                int textColor = a.getColor(R.styleable.MyView_textColor,0XFFFFFFFF);  
                float textSize = a.getDimension(R.styleable.MyView_textSize, 36);  
              
                mPaint.setTextSize(textSize);  
                mPaint.setColor(textColor);  
              
                a.recycle();  
            }

       
            @Override
            protected void onDraw(Canvas canvas)

            {  
                // TODO Auto-generated method stub  
                super.onDraw(canvas);  
                //设置填充  
                mPaint.setStyle(Style.FILL);  
              
                //画一个矩形,前俩个是矩形左上角坐标,后面俩个是右下角坐标  
                canvas.drawRect(new Rect(10, 10, 100, 100), mPaint);  
              
                mPaint.setColor(Color.BLUE);  
                //绘制文字  
                canvas.drawText(mString, 10, 110, mPaint);  
            }  
        } 

        代码1定义了一个自定义控件,名字为MyView,是从View类继承而来,也就是说它本身就是一种View,只是在View基础上加工而成了我们自己的自定义控件MyView.在此类种黄色的两行变量是我们新的属性变量.

     

        //---------------------------------------------------------------------------------

        2. 在res/values目录下建立一个attrs.xml的文件,并在此文件中增加对控件的属性的定义--代码2:

        <?xml version="1.0" encoding="utf-8"?>
        <resources>
            <declare-styleable name="MyView">
                <attr name="textColor" format="color" />
                <attr name="textSize" format="dimension" />
            </declare-styleable>
        </resources>

        在<resources>标签下使用<declare-styleable name="MyView">标签来告诉框架它包含的属性就是自定义控件MyView中的属性.黄色的两其实就对应了代码1中黄色的变量.

     

        //---------------------------------------------------------------------------------

        3.使用AttributeSet来完成控件类的构造函数,并在构造函数中将自定义控件类中变量与attrs.xml中的属性连接起来.

        我们再看一下代码1中的蓝色代码,其中使用AttributeSet来重载构造函数.在此函数中将类中的属性变量与代码二中定义的属性联系起来.

        //---------------------------------------------------------------------------------

        4.在自定义控件类中使用这些已经连接的属性变量.

        我们看一下代码1中的黄色部分,就是对我们新定义的属性的使用.

     

        //---------------------------------------------------------------------------------

        5.将自定义的控件类定义到布局用的xml文件中去.-----代码3:

        我们再看看布局的xml文件代码:

        <?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" >  
            <TextView android:layout_width="fill_parent"   
                android:layout_height="wrap_content"   
                android:text="@string/hello" />  

            <com.android.tutor.MyView  android:layout_width="fill_parent"   
                android:layout_height="fill_parent" test:textSize="20px" test:textColor="#fff" />  
        </LinearLayout>
        其中红色部分在布局中引用了我们MyView控件.

     

        //---------------------------------------------------------------------------------

        6.在界面中生成此自定义控件类对象,并加以使用.--------代码4.

     

        //-----------------------

  • 相关阅读:
    【转载】SAP_ECC6.0_EHP4或SAP_ECC6.0_EHP5_基于Windows_Server_2008R2_和SQL_server_2008下的安装
    使用delphi 开发多层应用(二十四)KbmMW 的消息方式和创建WIB节点
    使用delphi 开发多层应用(二十三)KbmMW 的WIB
    实现KbmMw web server 支持https
    KbmMW 服务器架构简介
    Devexpress VCL Build v2014 vol 14.1.1 beta发布
    使用delphi 开发多层应用(二十二)使用kbmMW 的认证管理器
    KbmMW 4.50.00 测试版发布
    Basic4android v3.80 beta 发布
    KbmMW 认证管理器说明(转载)
  • 原文地址:https://www.cnblogs.com/zuiyirenjian/p/4164016.html
Copyright © 2011-2022 走看看