第一种方法,直接设置属性值,通过attrs.getAttributeResourceValue拿到这个属性值。

(1)在xml文件中设置属性值

android:layout_width="fill_parent"

android:layout_height="wrap_content"

android:text="@string/smile1"

iconSrc="@drawable/smile"/>

(2)在构造函数中拿到这个值

public IconTextView(Context context, AttributeSet attrs) {

super(context, attrs);

resourceID = attrs.getAttributeResourceValue(null, "iconSrc", 0);

if(resourceID > 0) {

bitmap = BitmapFactory.decodeResource(getResources(), resourceID);

}

}

第二种方法,使用自己的命名空间

(1)注意在xml文件中,需要声明一个命名空间,形式为http:// + 这个VIEW的包名

xmlns:mobile="http://com.example.activity"

android:layout_width="fill_parent"

android:layout_height="fill_parent"

android:orientation="vertical" >

android:layout_width="fill_parent"

android:layout_height="wrap_content"

android:text="@string/smile1"

mobile:iconSrc="@drawable/smile"/>

(2)通过attrs.getAttributeResourceValue,其中第一个参数为命名空间。

//命名空间

private final String namespace = "http://com.example.activity"

public IconTextView(Context context, AttributeSet attrs) {

super(context, attrs);

resourceID = attrs.getAttributeResourceValue(namespace, "iconSrc", 0);

// TypedArray array = context.obtainStyledAttributes(attrs, R.styleable.IconTextView);

// resourceID = array.getResourceId(R.styleable.IconTextView_iconSrc, 0);

if(resourceID > 0) {

bitmap = BitmapFactory.decodeResource(getResources(), resourceID);

}

}

第三种方法,通过自定义attrs.xml来实现

(1)自定义一个attrs.xml文件

(2)在xml文件中使用这一属性,注意此时命名空间的书写规范。

xmlns:mobile="http://schemas.android.com/apk/res/com.example.activity"

android:layout_width="fill_parent"

android:layout_height="fill_parent"

android:orientation="vertical" >

android:layout_width="fill_parent"

android:layout_height="wrap_content"

android:text="@string/smile1"

mobile:iconSrc="@drawable/smile"/>

android:layout_width="fill_parent"

android:layout_height="wrap_content"

android:text="@string/smile2"

android:textSize="24dp"

mobile:iconSrc="@drawable/smile"/>

android:layout_width="fill_parent"

android:layout_height="wrap_content"

android:text="@string/smile3"

android:textSize="36dp"

mobile:iconSrc="@drawable/smile"/>

(3)在代码中使用context.obtainStyledAttributes获得属性值

package com.example.activity;

import android.content.Context;

import android.content.res.TypedArray;

import android.graphics.Bitmap;

import android.graphics.BitmapFactory;

import android.graphics.Canvas;

import android.graphics.Rect;

import android.util.AttributeSet;

import android.widget.TextView;

public class IconTextView extends TextView {

//命名空间

private final String namespace = "http://com.example.activity";

//资源ID

private int resourceID = 0;

private Bitmap bitmap;

public IconTextView(Context context, AttributeSet attrs) {

super(context, attrs);

TypedArray array = context.obtainStyledAttributes(attrs, R.styleable.IconTextView);

resourceID = array.getResourceId(R.styleable.IconTextView_iconSrc, 0);

if(resourceID > 0) {

bitmap = BitmapFactory.decodeResource(getResources(), resourceID);

}

}

@Override

public void onDraw(Canvas canvas) {

if (bitmap != null) {

Rect src = new Rect(0, 0, bitmap.getWidth(), bitmap.getHeight());

Rect target = new Rect();

int textHeight = (int)getTextSize();

target.left = 0;

target.top =(int)(getMeasuredHeight() - getTextSize()) / 2 + 1;

target.bottom = target.top + textHeight;

target.right = (int)(textHeight * (bitmap.getWidth() / (float)bitmap.getHeight()));

canvas.drawBitmap(bitmap, src, target, getPaint());

canvas.translate(target.right + 2, 0);

}

super.onDraw(canvas);

}

}

【Struts2】Struts2获取session的三种方式

1.Map map =  ActionContext.getContext().getSession(); 2.HttpSession session = S ...

android中解析文件的三种方式

android中解析文件的三种方式     好久没有动手写点东西了,最近在研究android的相关技术,现在就android中解析文件的三种方式做以下总结.其主要有:SAX(Simple API fo ...

Struts2(四.注册时检查用户名是否存在及Action获取数据的三种方式)

一.功能 1.用户注册页面

Struts中的数据处理的三种方式

Struts中的数据处理的三种方式: public class DataAction extends ActionSupport{ @Override public String execute() ...

OpenCV4Android释疑: 透析Android以JNI调OpenCV的三种方式(让OpenCVManager永不困扰)

OpenCV4Android释疑: 透析Android以JNI调OpenCV的三种方式(让OpenCVManager永不困扰) 前文曾详细探讨了关于OpenCV的使用,原本以为天下已太平.但不断有人反 ...

JS中事件绑定的三种方式

以下是搜集的在JS中事件绑定的三种方式.   1. HTML onclick attribute

一道经典的C++结构体的题目

题目描述: 有10个学生,每个学生的数据包括学号.姓名.英语.数学.物理三门课的成绩,从键盘输入10个学生数据,要求打印出3门课程的总平均成绩,以及最高分的学生的数据(包括学号,姓名,3门课的平均成绩 ...

CrashMe分析教程1 - BreakPoint

首先,谢谢 Robert Kuster 为我们提供了这么好的CrashMe项目. 很多人想寻找一个CrashMe分析的教程, 我也想要, 但是似乎网络里没有, 所以我就决定用业余时间写一个小系列来共享 ...

PHP7类型约束

在PHP7之前,函数和类方法不需要声明变量类型,任何数据都可以被传递和返回,导致几乎大部分的调用操作都要判断返回的数据类型是否合格. 为了解决这个问题,PHP7引入了类型声明. 目前有两类变量可以声明 ...

java关键字保留字

Here is a list of keywords in the Java programming language. You cannot use any of the following as ...

pyspider和pyquery总结

1.参考 pyspider作者官网: pyspider 爬虫教程(一):HTML 和 CSS 选择器 pyspider 爬虫教程(二):AJAX 和 HTTP pyspider 爬虫教程(三):使用 ...

android获取自定义属性,android 自定义控件中获取属性的三种方式(转)相关推荐

  1. android sqlite使用之模糊查询数据库数据的三种方式

    android sqlite使用之模糊查询数据库数据的三种方式 android应用开发中常常需要记录一下数据,而在查询的时候如何实现模糊查询呢?很少有文章来做这样的介绍,所以这里简单的介绍下三种sql ...

  2. Django中Model继承的三种方式

    Django中Model继承的三种方式 Django中Model的继承有三种: 1.抽象继承 2.多表继承 3.proxy model(代理model) 1.抽象继承 第一种抽象继承,创建一个通用父类 ...

  3. UE4学习-在虚幻编辑器中打开VS的三种方式

    文章目录 方式一 方式二 方式三 在虚幻编辑器中打开VS的三种方式 方式一 在文件浏览器这里,选择C++类,然后在文件夹内,找到一个和截图中类似的图标,双击,即打开vs,并在vs中打开这个类的代码. ...

  4. Java中实现接口的三种方式您造吗?

    本文介绍了Java中实现接口的三种方式:常规实现方式.匿名内部类和 Lambda表达式实现方式.希望已经了解的同学可以重新温习一下,不了解的同学则从中受益! Java中接口最常规的实现方式 同学们都会 ...

  5. java中实现多线程的三种方式

    java中实现多线程的三种方式 1.实现多线程的方法: 在java中实现多线程的两途径:继承Thread类,实现Runable接口(Callable) 2.继承Thread类实现多线程: ​ 继承类T ...

  6. java类初始数组_java中数组初始化的三种方式是什么

    java中数组初始化的三种方式是:1.静态初始化,如[int a[] = {2, 0, 1, 9, 2020}]:2.动态初始化,如[int[] c = new int[4]]:3.默认初始化,如[i ...

  7. 【查看linux中所有用户的三种方式】

    查看linux中所有用户的三种方式学习目标: 提示:通过使用 /etc/passwd 文件,getent 命令,compgen 命令这三种方法查看系统中用户的信息 用户信息存放位置: 提示:Linux ...

  8. java中Map遍历的三种方式

    Java中Map遍历的三种方式 前言 一:在for循环中使用entries实现Map的遍历: 二:在for循环中遍历key或者values,一般适用于只需要map中的key或者value时使用,在性能 ...

  9. 代码示例:Java中定义数组的三种方式

    在Java中,数组的定义有三种方式,其基本语法格式如下: 数组类型[] 数组名 = new 数组类型[数组长度]; 数组类型[] 数组名 = new 数组类型[]{数组元素0,数组元素1,...}; ...

最新文章

  1. 处理问题的方法--抽象和特例化
  2. dev编译器:c++如何让其输出小数16.84,浮点数类型数据!
  3. Java-ORM数据库框架CDM介绍
  4. 网络推广——符合网站现状的优化方案才是最适合进行网络推广的方案
  5. C语言实现最简单的2048小游戏
  6. 《服务外包概论》实验报告——版本管理与控制工具的综合应用
  7. oracle中minus
  8. 马云背后的女人:原来淘宝、支付宝的名字都是她取的
  9. jvm 分代回收算法通俗理解
  10. Revit API多选多重过滤
  11. Google学术IP被锁--403
  12. python写一个服务_Python写一个服务
  13. mysql隔离级别与锁,接口并发响应速度的关系(2)
  14. python 66:re正则表达式5(全- tcy)
  15. VMware Cloud Director Availability 4.0 百度网盘 下载
  16. 【单片机学习】51单片机【串口】,详细介绍
  17. 美团点评 2019校园招聘 后台开发方向职位编程题-2018.09.06
  18. 学计算机段子,段子手要失业了,计算机也懂幽默
  19. 人脸识别考勤 Android 课程设计
  20. 免费阅读里的“B站”,后浪已乘“疯”

热门文章

  1. kettle将文件路径定义为_kettle_步骤解释
  2. golang mysql商业用例_完美起航-golang操作mysql用例
  3. 给JDK报了一个P4的Bug,结果居然……
  4. struts.xml配置文件(一)
  5. 【深入Java虚拟机JVM 01】Java发展与展望概述
  6. python pandas读写excel_python pandas读写excel
  7. (Java多线程)多线程原理和使用
  8. 杭电1016Java实现
  9. Mybatis和Spring集成 sessionFactory.openSession() 事务不生效问题
  10. Java:如何正确地使用异常详解