• android自定义View_0——Create a custom view class


    一:创建一个自定义view的原则:

        1.符合android的标准

        2.能在layout的xml中定义控件属性

        3.实现些新功能

        4.要兼容android的大多数版本

    二:定义一个view的子类

        1.可以直接继承View,或是为了省时可以继承View的已实现的子类,如Button

        2.在继承View之后,需要提供一个构造函数,这个函数自少提供Context和AttributeSet两个变量。

         context用于提供上下文,AttributeSet用于提供自定义view的属性设置。

         

    三:定义自定义属性

        1.为了能在xml中使用自定属性,必须实现以下步骤:

          1.在res下创建res/values/attrs.xml,然后自定义属性。通常自定义的属性文件中的name属性名字和自定的view名字相同,这个随意。

            

          2.在你的布局文件中指定自定义view的属性值。在使用的时候,需要将命名空间加入布局文件中,格式如下:

            xmlns:NAME = http://schemas.android.com/apk/res/[your package name]

            

            提示:

               1.其中xmlns是一个特殊指令,因为命名空间一般都较长,所以用这个指令可以自定义名字来简化太长的命名空间

               2.在使用自定的view的时候,需要指明view的完全限定名,如果自定义的view是一个内部类,需要如下方式指定:

                com.example.customviews.charting.PieChart$PieView

          3.在运行时,检索属性值       

          4.将检索出来的属性值,付值到自定义的view上

    四:应用自定义属性

        1.初始化view的时候,属性都是检索xml标签中读取然后,通过bundle发送到构造函数中的Attributes中,

         当然也可以直接定义一个Attributes变量,然后初始化view的时候使用,但是不建议,原因如下:

            1.属性值的资源文件赋值都没有解决。

            2.样式的stlye不适用这么做。

        2.获得属性的方法是将AttributeSet发送给ObtainStyledAttributes(),这个方法将返回一个TypedArray包含了已经确定的属性值和风格。

         每一个定义好的 <declare-styleable>都会在R文件中自动生成一个属性数组集合引用和每个属性的引用。其实每个属性的引用值,就是他

         在属性集合数组中的index。

            

            

            

         在自定义view中读取属性方法:

            

          提示:因为TpedArray是共享的资源,所以使用后必须回收。

    五:添加动态改变属性事件

        1.Attributes虽然很强大,可以很灵活的改变控件的属性,但是这些属性只能在初始化的时候使用,所以为了能动态的改变自定义的属性,可以提供

         一个成员变量,并提供set和get方法。

            

        2.在setShowText方法的最后调用了invaladate()和requestLayout()。这两个方法实现了当view的属性如大小,颜色等,被改变了之后,需要通知

         系统当前的view需要被重新绘制

        3.一个自定义的view不仅要提供成员变量,同时需要也好提供一个监听的方法,这样的设计可以使view变得更灵活。

    六:使设计更容易使用:

        1.当你的使用者有身体残疾或是其他的问题时,要保证设计能够让他们使用:

          1.输入标签使用android:contentDescription属性。

          2.当需要发送辅助服务的时候请调用sendAccessibilityEvent().

          3.支持备用设备,如滚动球和手柄(游戏机那个东西)。

  • 相关阅读:
    jQuery-File-Upload文件上传
    JavaScript探秘:强大的原型和原型链
    JavaScript 开发进阶:理解 JavaScript 作用域和作用域链
    前端开发面试题及答案
    JSP页面
    XMLHTTP.readyState的五种状态
    HTTP: The Protocol Every Web Developer Must Know
    W3C-Web Service
    H5教程
    PHP 页面编码声明方法(header或meta)
  • 原文地址:https://www.cnblogs.com/qinghuaideren/p/3491176.html
Copyright © 2020-2023  润新知