Google教我如何定制自己的View

前言

今天我看了Google教程中有关定制View的相关内容,这是之前从来没有接触过的领域,在github上能经常看到一些大神自定义的View,比如按钮,ListView,好像他们天生就可以随心所欲的定制自己的View,而自己也不知道如何入门,今天再Google上碰到了这一节,就心血来潮的看了看,Google只讲了大概,看完还不是很懂,不过也学到一些东西。这一块的内容还是在理解的基础上多看看代码才能明白呀。


正文

在项目里,我们经常会遇到一些需求是Android内置View无法满足我们的,这时我们就需要定义自己的View。

创建一个View类

一个设计良好的类包含很多容易使用的功能,而且也能有效的利用CPU和内容资源,它还应该具有以下的特性:

  • 符合Android标准
  • 提供XML可指定的自定义属性
  • 发送事件
  • 兼容多种Android平台

Android提供了基本一些基本类和XML标签能够帮助我们指定符合这些要求的类。

定义一个View子类

Android里面所有的View类全部都继承于View类,所以你也应该去继承View类,当然也可以为了节约时间去继承已有的View类,比如说Button。

为了让Android Studio去和你的View交互,你至少应该提供一个构造函数,把Context和AttributeSet对象作为参数,这个构造函数能够允许让布局编辑器去创建和编辑你的View实例。

class PieChart extends View {
   
    public PieChart(Context context, AttributeSet attrs) {
        super(context, attrs);
    }
}

定义自定义的属性

为了把一个内置的View添加到UI,你应该通过XML元素的方式制定它并且通过元素属性控制它的外观和行为。定义良好的View可以通过XML的方式添加和制定样式。为了在View中做到这一点,你应该:

  • 通过一个< declare-styleable >资源元素去指定自定义View的属性
  • 确定XML布局文件里的属性值
  • 在运行时重新获取这些属性值
  • 把这些属性值应用给你的View

这节讨论如何去定制这些属性和确定他们的值,下一节会讲如何重新获取并在运行时应用他们。

为了定义一个自定义的属性,添加< declare-styleable >元素到你的项目里。习惯上一般都把它放到res/values/attrs.xml文件里,这里有一份XML文件的样例:

<resources>
   <declare-styleable name="PieChart">
       <attr name="showText" format="boolean" />
       <attr name="labelPosition" format="enum">
           <enum name="left" value="0"/>
           <enum name="right" value="1"/>
       </attr>
   </declare-styleable>
</resources>

这份代码声明了两个定制的属性,showText和labelPosition,属于一个名叫PieChart的自定义的实体。按照惯例,这个名字应该和自定义View的类名保持一致。但也不是必须要严格的遵循这个管理,许多流行的代码编辑器都依靠它自己的命名惯例去命名。

一旦你定义好了一个定制属性,你就可以在xml文件里面像内置属性一样使用它们了。唯一的不同就是这些内置属性属于另一个不同的命名空间。不是我之前经常见的http://schemas.android.com/apk/res/android命名空间了,它们属于http://schemas.android.com/apk/res/[你的包名]。举一个例子,如何应用PieChart的属性:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
   xmlns:custom="http://schemas.android.com/apk/res/com.example.customviews">
 <com.example.customviews.charting.PieChart
     custom:showText="true"
     custom:labelPosition="left" />
</LinearLayout>

为了避免去重复很长的命名空间URI,这个例子使用了xmlns指令。这个指令会给http://schemas.android.com/apk/res/com.example.customviews分配一个别名。你可以任意的去为你的命名空间选择你想要的别名。

注意

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值