Android利用已有控件实现自定义控件
Android控件的基本介绍及使用自定义控件的意义
自定义控件就需要首先自定义该控件的属性。在开始前,我们需要检查在values目录下是否有attrs.xml,如果没有则创建。下面我们先来了解一下format属性类型都有哪些。
format可选项
我们可以在已有的控件的基础上,通过重写相关方法来实现我们的需求。 举一个最简单的例子说明,比如现在的RadioButton按钮只能存在一个text,如果我们想存储key-value对应的键值对,那么我们就需要自定义一个控件。这时定义的控件仅仅比RadioButton多了一个存储key的控件。实现如下:首先在开始前,我们需要检查在values目录下是否有attrs.xml,如果没有则创建。下面把创建的代码贴出来,如下:
- <?xml version="1.0" encoding="utf-8"?>
- <resources>
- <declare-styleable name="RadioButton"><!-- 控件名称-->
- <attr name="value" format="string"/><!-- 属性名称,类型-->
- </declare-styleable>
- </resources>
然后在创建MRadioButton类,该类继承RadioButton。代码如下:
- public class MyRadioButton extends android.widget.RadioButton implements OnCheckedChangeListener {
- private String mValue;
- public MyRadioButton(Context context, AttributeSet attrs) {
- super(context, attrs);
- try {
- /**
- * 跟values/attrs.xml里面定义的属性绑定
- */
- //TypedArray其实就是一个存放资源的Array
- TypedArray a = context.obtainStyledAttributes(attrs,
- R.styleable.RadioButton);
- this.mValue = a.getString(R.styleable.RadioButton_value);
- //重复使用对象的styleable属性
- a.recycle();
- } catch (Exception e) {
- e.printStackTrace();
- }
- setOnCheckedChangeListener(this);
- }
- public String getValue() {
- return this.mValue;
- }
- public void setValue(String value) {
- this.mValue = value;
- }
- @Override
- public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
- System.out.println( "-------Main te new value is ===>" + this.getValue());
- }
- }
然后再看Layout中的xml代码:
- <?xml version="1.0" encoding="utf-8"?>
- <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:fsms="http://schemas.android.com/apk/res/com.cherry.myview"
- android:layout_width="fill_parent"
- android:layout_height="fill_parent"
- android:orientation="vertical" >
- <com.cherry.view.MyRadioButton
- android:id="@+id/isPayDepositTrue"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:text="@string/yes"
- android:textSize="18sp"
- fsms:value="true" >
- </com.cherry.view.MyRadioButton>
- </LinearLayout>
其中:xmlns:fsms=http://schemas.android.com/apk/res/com.cherry.myview为定义命名空间路径,这里定义完后,就可以对value进行赋值了。
最后我们来看一下Main函数:
- public class MyView extends Activity {
- private MyRadioButton isPayDepositTrue;
- /** Called when the activity is first created. */
- @Override
- public void onCreate(Bundle savedInstanceState) {
- super.onCreate(savedInstanceState);
- setContentView(R.layout.main);
- isPayDepositTrue = (MyRadioButton) findViewById(R.id.isPayDepositTrue);
- //isPayDepositTrue.setValue("false");
- isPayDepositTrue.setChecked(Boolean.valueOf(isPayDepositTrue.getValue()));
- }
- }
编译运行,效果如下:
Android利用已有控件实现自定义控件的更多相关文章
- Android常用酷炫控件(开源项目)github地址汇总
转载一个很牛逼的控件收集帖... 第一部分 个性化控件(View) 主要介绍那些不错个性化的 View,包括 ListView.ActionBar.Menu.ViewPager.Gallery.Gri ...
- Android 常用炫酷控件(开源项目)git地址汇总
第一部分 个性化控件(View) 主要介绍那些不错个性化的 View,包括 ListView.ActionBar.Menu.ViewPager.Gallery.GridView.ImageView.P ...
- Android中自定义组合控件
Android中自定义控件的情况非常多,一般自定义控件可以分为两种:继承控件及组合控件.前者是通过继承View或其子类,重写方法实现自定义的显示及事件处理方式:后者是通过组合已有的控件,来实现结构的简 ...
- android中的EditView控件
android中的EditView控件 EditText继承关系:View-->TextView-->EditText ,EditText是可编辑文本框 1.EditText默认情况下,光 ...
- MaterialEditText——Android Material Design EditText控件
MaterialEditText是Android Material Design EditText控件.可以定制浮动标签.主要颜色.默认的错误颜色等. 随着 Material Design 的到来, ...
- c# 中的UserControl是什么 用户控件和自定义控件有什么区别
用户控件是许多控件的集成 自定义控件是自己写一个控件类,或者继承已有的控件类 复合控件是封装在公共容器内的 Windows 窗体控件的集合.这种控件有时称为“用户控件”.包含的控件称为“构成控件”. ...
- Android实现监听控件点击事件
Android实现监听控件点击事件 引言 这篇文章主要想写一下Android实现监听点击事件的几种方法,Activity和Fragment实现起来有些方法上会有些不同,这里也略做介绍. 最近一直在忙一 ...
- (转载)Android自定义标签列表控件LabelsView解析
Android自定义标签列表控件LabelsView解析 作者 donkingliang 关注 2017.03.15 20:59* 字数 759 阅读 406评论 0喜欢 3 无论是在移动端的App, ...
- Android零基础入门第17节:Android开发第一个控件,TextView属性和方法大全
原文:Android零基础入门第17节:Android开发第一个控件,TextView属性和方法大全 前面简单学习了一些Android UI的一些基础知识,那么接下来我们一起来详细学习Android的 ...
随机推荐
- django错误 - Reason given for failure: CSRF cookie not set.
练习Django表单提交时遇到如下问题: 在网上各种查找,终于找到了解决方法. 1.在from 表单中添加 {% csrf_token %} 2.在视图中添加 from django.template ...
- windows下关闭指定端口服务,解决tomcat端口占用问题
http://blog.aizhet.com/Server/640.html 在windows下做java EE的开发时:搭建 Eclipse+tomcat的java web开发环境:在应用之中经常遇 ...
- java socket 以及 流 关闭的问题
首先我一下几个提出问题:稍后再做出解答. 问题一:A如果仅仅将输入流关闭(inA.close()),对A与B之间的连接是否有影响? A能否再次获得输入流(inA = socketA.getInputS ...
- Socket教程
Socket网络编程学习笔记(6):使用线程池提高性能 Socket网络编程学习笔记(5):发送和接收实体类数据 Socket网络编程学习笔记(4):TCP消息边界处理 Socket网络 ...
- hibernate的基础学习--多对多关联
多对多采用学生老师模型进行测试 学生配置文件: <?xml version="1.0" encoding="utf-8" ?> <!DOCTY ...
- E20180410-sl
category n. 类型,部门,种类,类别,类目; [逻,哲] 范畴; 体重等级;
- (水题)洛谷 - P1036 - 选数
https://www.luogu.org/problemnew/show/P1036 $n$ 才20的数据量,我当时居然还在想怎么分组组合,直接 $2^{20}$ 暴力搞就行了. $x_i $太大了 ...
- python property的2种使用方法
一.property类 class Person(): def __init__(self, name): self.set_name(name) def get_name(self): return ...
- 腾讯QQ团队开源分布式后台毫秒服务引擎全解析:引擎架构、RPC、灰度……
腾讯QQ团队将于12月4日开源一个服务开发运营框架,叫做毫秒服务引擎(Mass Service Engine in Cluster,MSEC),它集RPC.名字发现服务.负载均衡.业务监控.灰度发布. ...
- 函数和代码复用 --Python
1.关于递归函数的描述,以下选项中正确的是 A.包含一个循环结构 B.函数比较复杂 C.函数内部包含对本函数的再次调用 D.函数名称作为返回值 答案:D 答案解析:递归函数是指函数内部包含对本函数的再 ...