Android自定义控件及自定义属性

自定义控件

创建自定义控件

自定义一个类,继承View

继承View还是哪个类,取决于你要实现一个什么样的控件

如果你要实现的是一个线性布局的组合控件,就可以继承LinearLayout

如果你要实现的是一个布局复杂的组合控件,就可以继承RelativeLayout

具体根据实际情况

这里我要实现一个Android端的显示验证码的控件,我只继承View

package ……;

import ……

/**
* Created by kongqw on 2015/10/23.
*/
public class CheckView extends View {
…… public CheckView(Context context, AttributeSet attrs) {
super(context, attrs);
mContext = context;
……
} public void onDraw(Canvas canvas) {
// 画界面
……
} ……
}

类似的,如果你是继承了RelativeLayout,大概可以这样实现

package ……;

import ……

/**
* Created by kongqw on 2015/7/10.
*/
public class KTop extends RelativeLayout { private ……
…… public KTop(Context context) {
super(context);
initView();
} public KTop(Context context, AttributeSet attrs) {
super(context, attrs);
initView();
} public KTop(Context context, AttributeSet attrs, int defStyleAttr) {
super(context, attrs, defStyleAttr);
initView();
} /**
* 初始化界面
*/
private void initView() {
view = View.inflate(getContext(), R.layout.k_top, this);
// 控件背景
mTitleView = (RelativeLayout) view.findViewById(R.id.title_view);
// 只举一个例子,这里可以获取的布局里的控件
…… } // 做一些其他操作的处理,例如控件的点击事件处理等
…… }

使用自定义控件

在布局文件中的使用

<kong.qingwei.demo.kqwcheckviewdemo.CheckView
android:id="@+id/checkView"
android:layout_width="wrap_content"
android:layout_height="50dp" />

自定义属性

定义自定义属性

在values文件夹下创建attrs.xml文件

name是自定义属性的名称

format是自定义属性的类型,有如下类型,就不一一介绍了

代码

<?xml version="1.0" encoding="utf-8"?>
<resources>
<declare-styleable name="CheckView">
<!-- 随机点数 -->
<attr name="point_num" format="integer" />
<!-- 随机线数 -->
<attr name="point_line" format="integer" />
<!-- 验证码长度 -->
<attr name="text_length" format="integer" />
<!-- 验证码字体大小-->
<attr name="text_size" format="integer" />
<!-- 验证码字体颜色 -->
<attr name="text_color" format="color" />
</declare-styleable>
</resources>

使用自定义属性

在使用自定义控件的xml文件里引入命名空间

xmlns:kongqw="http://schemas.android.com/apk/res-auto"

自定义属性的使用

kongqw:point_num="5"

示例

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:kongqw="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"> …… <kong.qingwei.demo.kqwcheckviewdemo.CheckView
android:id="@+id/checkView"
android:layout_width="wrap_content"
android:layout_height="50dp"
kongqw:point_num="5" /> …… </LinearLayout>

效果图

Android自定义控件及自定义属性的更多相关文章

  1. Android自定义控件之自定义属性

    前言: 上篇介绍了自定义控件的基本要求以及绘制的基本原理,本篇文章主要介绍如何给自定义控件自定义一些属性.本篇文章将继续以上篇文章自定义圆形百分比为例进行讲解.有关原理知识请参考Android自定义控 ...

  2. Android自定义控件之自定义属性(二)

    前言: 上篇介绍了自定义控件的基本要求以及绘制的基本原理,本篇文章主要介绍如何给自定义控件自定义一些属性.本篇文章将继续以上篇文章自定义圆形百分比为例进行讲解.有关原理知识请参考Android自定义控 ...

  3. android 自定义控件,自定义属性设置

    做listView的上拉下拉刷新,网上找了个历程.但是有些界面只有上拉刷新,有些界面是下拉刷新.觉得应该在xml里定义一个属性控制上下拉使能. 0.关于自定义控件: 自定义控件设计主要方式有:a) 继 ...

  4. android自定义控件(三) 自定义属性

    书接上回 在xml里建立属性,然后java代码里用typedArray获得这些属性,得到属性后,利用属性做一些事.例:得到xml里的color,赋给paint. 1.在res/values/下新建at ...

  5. Android自定义控件之自定义ViewGroup实现标签云

    前言: 前面几篇讲了自定义控件绘制原理Android自定义控件之基本原理(一),自定义属性Android自定义控件之自定义属性(二),自定义组合控件Android自定义控件之自定义组合控件(三),常言 ...

  6. Android自定义控件之自定义组合控件

    前言: 前两篇介绍了自定义控件的基础原理Android自定义控件之基本原理(一).自定义属性Android自定义控件之自定义属性(二).今天重点介绍一下如何通过自定义组合控件来提高布局的复用,降低开发 ...

  7. Android自定义控件之基本原理

    前言: 在日常的Android开发中会经常和控件打交道,有时Android提供的控件未必能满足业务的需求,这个时候就需要我们实现自定义一些控件,今天先大致了解一下自定义控件的要求和实现的基本原理. 自 ...

  8. Android自定义控件之自定义组合控件(三)

    前言: 前两篇介绍了自定义控件的基础原理Android自定义控件之基本原理(一).自定义属性Android自定义控件之自定义属性(二).今天重点介绍一下如何通过自定义组合控件来提高布局的复用,降低开发 ...

  9. Android开发技巧——自定义控件之自定义属性

    Android开发技巧--自定义控件之自定义属性 掌握自定义控件是很重要的,因为通过自定义控件,能够:解决UI问题,优化布局性能,简化布局代码. 上一篇讲了如何通过xml把几个控件组织起来,并继承某个 ...

随机推荐

  1. SSO-单点统一登录系统的设计与实现

    本文主要基于web类应用展开讨论,提供的是一种通用机制和方法,所以不论何种技术栈都可进行相应的具体实现. 实现目标 可以在相同或跨域环境下完成各应用的统一登录/注销 方案原理 本质上是采用了web应用 ...

  2. [LeetCode] Array Nesting 数组嵌套

    A zero-indexed array A consisting of N different integers is given. The array contains all integers ...

  3. C语言中关于运算符优先级别

    在一一个表达式中可能有多个不同的运算符结合起来,由于运算符的优先级别不一样,可能会形成得到的结果不同. 优先级从上到下依次递减,最上面具有最高的优先级,逗号操作符具有最低的优先级. 对于相同的优先级, ...

  4. SpringIOC学习三

    基于注解的注入:就是用注解标签的方式替换掉我们xml配置文件里面bean的注册和依赖关系的描述    a:首先回顾IOC(控制反转),进行依赖注入需要做到两件事情:        1:注册类  2:描 ...

  5. github学习(三)

    Git学习(二) 分支学习: 创建新分支dev:git branch dev 切换到dev分支:git checkout dev 可以简写为一句话:git checkout -b dev 可以用命令g ...

  6. [CEOI 2004]Sweet

    Description 题面链接 有 \(n\) 种糖果.第 \(i\) 种糖果有 \(m_i\) 个.取出一些糖果,至少 \(a\) 个,但不超过 \(b\) 个.求方案数. \(1\leq n\l ...

  7. [Ahoi2005]LANE 航线规划

    题目描述 对Samuel星球的探险已经取得了非常巨大的成就,于是科学家们将目光投向了Samuel星球所在的星系——一个巨大的由千百万星球构成的Samuel星系. 星际空间站的Samuel II巨型计算 ...

  8. Linux 基本概念和操作

    我们在使用Linux时,不是直接和系统打交道,而是通过shell的中间程序.在图形界面下为了实现窗口的输入和输出,linux系统为我们提供了终端模拟器Terminal,常见的终端模拟器有 gnome- ...

  9. ubuntu上的附件-终端和用快捷键ctrl+alt+f1 有啥区别

    ctrl +alt +Fn 打开的是模拟终端,简单说来,linux系统一开机会自动打开6个模拟终端,然后自动切换到其中一个(一般来说是切换到图形界面的那个也就是说窗口管理器是在这6个模拟终端中运行的) ...

  10. 关于html+ashx开发中几个问题的解决方法的感想和总结

    1.针对上篇文章中的服务端处理不敢苟同.仍然坚持使用反射,建立BaseHandler.ashx并在默认process方法中写上反射方法以及权限验证方法.针对具体的情况返回对应的值.服务端其他handl ...