一、概述

  在android开发中很多UI控件往往需要进行定制以满足应用的需要或达到更加的效果,接下来就通过一个系列来介绍自定义控件,这里更多是通过一些案例逐步去学习,本系列有一些典型的应用,掌握好了大家也可去创新开发出一些更好的UI,本次先通过简单案例掌握一些基础知识——如何在自定义控件中定义属性.

二、实现定制一个简单RadioButton

  1、编写类型MRadioButton 扩展RadioButton

public class MRadioButton extends RadioButton {

}

  2、在MRadioButton类中,定制属性

  我们可以在控件中定义自己的属性,可以定义多个属性,但必须封装提供set/get方法,也就是按规范写。如mValue属性,像下面代码

private String mValue;
public String getmValue() {
return mValue;
}
public void setmValue(String mValue) {
this.mValue = mValue;
}

  3、为定制的属性编写attrs.xml资源

  该资源文件放在res/values目录下,内容如下:

<?xml version="1.0" encoding="utf-8"?>
<resources>
<declare-styleable name="MRadioButton">
<! – 属性名称-->
<attr name="value" format="string" />
</declare-styleable>
</resources>

  4、在MRadioButton类中定义构造函数,初始化属性

            public MRadioButton(Context context) {
super(context);
}
public MRadioButton(Context context, AttributeSet attrs, int defStyle) {
super(context, attrs, defStyle);
}
public MRadioButton(Context context, AttributeSet attrs) {
super(context, attrs);
//从attrs.xml中加载一个名字叫’ .MRadioButton’的declare-styleable资源
TypedArray tArray = context.obtainStyledAttributes(attrs, R.styleable.MRadioButton);
//将属性value与类中的属性mValue关联
this.mValue = tArray.getString(R.styleable.MRadioButton_value);
//回收tArray对象
tArray.recycle();
}

  5、在MainActivity中布局文件中添加MRadioButton组件,如下所示

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
xmlns:jereh="http://schemas.android.com/apk/res/com.jereh. view"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context="com.example.zdyview.MainActivity" > <com.itc.zidingyiview.MRadioButton
android:layout_width="match_parent"
android:layout_height="match_parent"
android:id="@+id/mrb"
jereh:value="hello"
/> </RelativeLayout>

  6、MainActivity代码:

public class MainActivity extends Activity {
private MRadioButton rb;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
rb=(MRadioButton)super.findViewById(R.id.mrb);
rb.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Toast.makeText(MainActivity.this, rb.getmValue(),Toast.LENGTH_LONG).show();
}
});
}
}

Android自定义控件系列之基础篇的更多相关文章

  1. Android自定义控件系列之应用篇——圆形进度条

    一.概述 在上一篇博文中,我们给大家介绍了Android自定义控件系列的基础篇.链接:http://www.cnblogs.com/jerehedu/p/4360066.html 这一篇博文中,我们将 ...

  2. Android Fragment使用(一) 基础篇 温故知新

    Fragment使用的基本知识点总结, 包括Fragment的添加, 参数传递和通信, 生命周期和各种操作. Fragment使用基础 Fragment添加 方法一: 布局里的标签 标识符: tag, ...

  3. 从0到1用react+antd+redux搭建一个开箱即用的企业级管理后台系列(基础篇)

    背景 ​ 最近因为要做一个新的管理后台项目,新公司大部分是用vue写的,技术栈这块也是想切到react上面来,所以,这次从0到1重新搭建一个react项目架子,需要考虑的东西的很多,包括目录结构.代码 ...

  4. 【webpack 系列】基础篇

    Webpack 基础篇 基本概念 Webpack 是一个现代 JavaScript 应用程序的静态模块打包器.当 webpack 处理应用程序时,它会递归地构建一个依赖关系图,其中包含应用程序需要的每 ...

  5. 深入了解Android蓝牙Bluetooth——《基础篇》

    什么是蓝牙?   也可以说是蓝牙技术.所谓蓝牙(Bluetooth)技术,实际上是一种短距离无线电技术,是由爱立信公司公司发明的.利用"蓝牙"技术,能够有效地简化掌上电脑.笔记本电 ...

  6. Android自己定义View基础篇(三)之SwitchButton开关

    自己定义View基础篇(二) 自己定义View基础篇(一) 自己定义View原理 我在解说之前,先来看看效果图,有图有真相:(转换gif图片效果太差) 那来看看真实图片: 假设你要更改样式,请改动例如 ...

  7. SQL系列总结——基础篇(三)

    之前的两篇文章SQL系列总结:<基础篇一>, <基础篇二>已经介绍了一些基本的数据库知识.现在让我们来从头开始构建一个数据库.到管理数据库和对象. 架构开始!     1.创建 ...

  8. SQL系列总结——基础篇(一)

       数据库与表.列的关系其实就像是一个Excel工作薄(workbook)与Excel表格(sheet)以及表格中的列的关系一样.关系数据库中最基本的对象有3个:表.列.用户     基本的概念名词 ...

  9. Android图片开发内幕--基础篇

    前言:本来我是做电视应用的,但是因为公司要出手机,人员紧张,所以就抽调我去支援一下,谁叫俺是雷锋呢!我做的一个功能就是处理手机中的应用ICON,处理无非就是美化一下,重新与底板进行合成和裁剪,用到了很 ...

随机推荐

  1. VMwareTools安装失败提示找不到C headers和gcc目录

    在VMware虚拟机上安装好linux系统后,发现往往不能全屏,也不能设置共享文件夹进行文件共享,这时候可以通过安装VMwareTools这个工具来实现文件拖拽.共享和全屏. 安装的过程不再赘述,关键 ...

  2. Elasticsearch学习随笔(二)-- Index 和 Doc 查询新建API总结

    本文着重总结Elasticsearch的常见API了,进行分析. Index API 初始化Index,设置shards和replica PUT http://localhost:9200/firew ...

  3. 总结下Redux

    Redux 和 React 没有直接关系,它瞄准的目标是应用状态管理. 核心概念是 Map/Reduce 中的 Reduce.且 Reducer 的执行是同步,产生的 State 是 Immutabl ...

  4. Java - 初始化

    用构造器保证初始化 构造器名称必须与类名完全相同,所以“每个方法首字母必须小写”的风格不适合构造器. 不接受任何参数的构造器叫做默认构造器.Java文档中通常叫做无参构造器. 构造器没有返回值,但与返 ...

  5. 关于启动文件分析的(MDK-ARM) 【转】

    ;******************** (C) COPYRIGHT 2010 STMicroelectronics ******************** ;* File Name : star ...

  6. 安卓平台使用pocketSphinx离线语音识别

    版权声明:本文为elecdog原创文章,可以转载,但必须在明确位置注明出处!谢谢合作. 关于语音识别,国内已经有比较好的公司推出相关的服务了,比如百度免费的离在线融合语音识别以及讯飞收费的在线和离线语 ...

  7. easyUI日期框返回到月份,选择日期也只到月份

    easyUI日期框返回到月份,选择日期也只到月份,不是原创,引用了园友的一篇文章,自己写下来,以便不时之需,谢谢. 1 $(function () { $('#date').datebox({ onS ...

  8. Linux编译安装程序(使用configure、make、 make install)

    以安装vim为例. (vim 是vi的升级版本,它不仅兼容vi的所有指令,而且还有一些新的特性在里面). 1.获取源文件 首先进入/usr/local下(只是为了方便处理安装文件,位置随意) 用git ...

  9. vue怎么样创建组件呢??

    我知道vue中核心就是组件,但是组件是什么呢?组件有什么用呢?怎么用组件呢?怎么样创建自己的组件呢? 前面两个问题就不说了,这里来说说,后面的两个问题: 1)创建自己的组件 通过vue.extend( ...

  10. (转)搬瓦工(bandwagonhost)后台管理VPS

    1. Bandwagonghost使用建议 购买了搬瓦工(bandwagonhost)的VPS,如何使用呢? 首先插几句使用建议,老高认为十分重要,为什么呢?搬瓦工如果监控到有大量的垃圾信息从我们的主 ...