Android中如何使用xmlns
http://blog.csdn.net/lihenair/article/details/41009711
工作中时常需要自定义控件,除了按键,draw以外,还需要对控件属性进行一些初始化的操作,比如控件的边距,字体大小,颜色等。
本文将根据需求,实现一个自定义的TextView。
1 需求
要求TextView的字体是30sp,颜色是#FF00FFAD。
针对这两个需求,做出如下定义
colors.xml
- <?xml version="1.0" encoding="utf-8"?>
- <resources>
- <color name="textcolor">#FF00FFAD</color>
- </resources>
dimens.xml
- <resources>
- <!-- Default screen margins, per the Android Design guidelines. -->
- <dimen name="activity_horizontal_margin">16dp</dimen>
- <dimen name="activity_vertical_margin">16dp</dimen>
- <dimen name="text_size">30sp</dimen>
- </resources>
2 定义属性声明
- <?xml version="1.0" encoding="utf-8"?>
- <resources>
- <declare-styleable name="LargeText">
- <attr name="textsize" format="dimension" />
- <attr name="textcolor" format="color" />
- </declare-styleable>
- </resources>
这里需要注意的是format属性的定义,format="reference"一般用于字符串,表示引用的是某个string的定义
3 导入控件
有了以上定义,我们就可以在layout文件中加入以上定义的属性了
main.xml
- <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:tools="http://schemas.android.com/tools"
- xmlns:LargeText="http://schemas.android.com/apk/res/com.example.nfctest" //引入自定义属性的风格
- android:layout_width="match_parent"
- android:layout_height="match_parent"
- android:paddingBottom="@dimen/activity_vertical_margin"
- android:paddingLeft="@dimen/activity_horizontal_margin"
- android:paddingRight="@dimen/activity_horizontal_margin"
- android:paddingTop="@dimen/activity_vertical_margin"
- tools:context=".NFCActivity" >
- <com.example.nfctest.LargeText android:id="@+id/state"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:text="@string/hello_world"
- LargeText:textsize="@dimen/text_size" //引用自定义的字体大小
- LargeText:textcolor="@color/textcolor" /> //引用自定义的颜色
- </RelativeLayout>
引入自定义控件在layout中需要包含packagename,格式是<package-name>.<customize-class_name>
自定义属性风格需要在layout或者view的属性列加载,格式是xmlns:<style-name>=“http://schemas.Android.com/apk/res/<package-name>”
使用自定义属性的格式是<style-name>:<attrs-name>
4 万事俱备,现在需要定义LargeText.java
LargeText.java
- package com.example.nfctest;
- import android.content.Context;
- import android.content.res.TypedArray;
- import android.util.AttributeSet;
- import android.widget.TextView;
- public class LargeText extends TextView {
- public LargeText(Context context) {
- this(context, null, 0);
- // TODO Auto-generated constructor stub
- }
- public LargeText(Context context, AttributeSet attrs) {
- this(context, attrs, 0);
- // TODO Auto-generated constructor stub
- }
- public LargeText(Context context, AttributeSet attrs, int defStyle) {
- super(context, attrs, defStyle);
- // TODO Auto-generated constructor stub
- TypedArray a = context.obtainStyledAttributes(attrs, R.styleable.LargeText, defStyle, 0);
- int textColor = a.getColor(R.styleable.LargeText_textcolor,
- 0XFFFFFFFF);
- float textSize = a.getDimension(R.styleable.LargeText_textsize, 36);
- a.recycle(); //使用类型数组后,需要回收它
- setTextSize(textSize);
- setTextColor(textColor);
- }
- }
通过以上4步,自定义的textview就会按照我们定义的属性去显示文字了。
Android中如何使用xmlns的更多相关文章
- 如何理解Android中的xmlns
转发自:https://www.jianshu.com/p/6fcaffaeffd2 作为一名 Android 开发,我想大家对xmlns并不会陌生,因为在写布局文件(如下代码所示)的时候经常会碰到, ...
- Android中的LinearLayout布局
LinearLayout : 线性布局 在一般情况下,当有很多控件需要在一个界面列出来时,我们就可以使用线性布局(LinearLayout)了, 线性布局是按照垂直方向(vertical)或水平方向 ...
- Android中BroadcastReceiver的两种注册方式(静态和动态)详解
今天我们一起来探讨下安卓中BroadcastReceiver组件以及详细分析下它的两种注册方式. BroadcastReceiver也就是"广播接收者"的意思,顾名思义,它就是用来 ...
- Android中使用ExpandableListView实现微信通讯录界面(完善仿微信APP)
之前的博文<Android中使用ExpandableListView实现好友分组>我简单介绍了使用ExpandableListView实现简单的好友分组功能,今天我们针对之前的所做的仿微信 ...
- Android中ListView实现图文并列并且自定义分割线(完善仿微信APP)
昨天的(今天凌晨)的博文<Android中Fragment和ViewPager那点事儿>中,我们通过使用Fragment和ViewPager模仿实现了微信的布局框架.今天我们来通过使用Li ...
- Android中Fragment和ViewPager那点事儿(仿微信APP)
在之前的博文<Android中使用ViewPager实现屏幕页面切换和引导页效果实现>和<Android中Fragment的两种创建方式>以及<Android中Fragm ...
- Android中的flexboxlayout布局
提到FlexboxLayout大家估计有点模糊,它是谷歌最近开源的一个android排版库,它的前身Flexbox是2009年W3C提出了一种新的布局,可以简便.完整.响应式的实现页面布局,Flexb ...
- Android中使用ExpandableListView实现好友分组
一个视图显示垂直滚动两级列表中的条目.这不同于列表视图,允许两个层次,类似于QQ的好友分组.要实现这个效果的整体思路为: 1.要给ExpandableListView 设置适配器,那么必须先设置数据源 ...
- Android中使用ViewPager实现屏幕页面切换和页面切换效果
之前关于如何实现屏幕页面切换,写过一篇博文<Android中使用ViewFlipper实现屏幕切换>,相比ViewFlipper,ViewPager更适用复杂的视图切换,而且Viewpag ...
随机推荐
- JAVA 注解的基本原理
以前,『XML』是各大框架的青睐者,它以松耦合的方式完成了框架中几乎所有的配置,但是随着项目越来越庞大,『XML』的内容也越来越复杂,维护成本变高. 于是就有人提出来一种标记式高耦合的配置方式,『注解 ...
- ARP的通信过程
在当今的以太网络通信中,在IP数据包中有两个必不可少的地址,那就是IP地址和网卡地址(即MAC地址),在数据包中,无论是IP地址还是MAC地址,都有源地址和目标地址,因为通信是双方的,所以就必须同时拥 ...
- c# DataSet转换为Json
/// <summary> /// DataSet转换为Json /// </summary> /// <param name="dataSet"&g ...
- Java并发编程:Java线程池核心ThreadPoolExecutor的使用和原理分析
目录 引出线程池 Executor框架 ThreadPoolExecutor详解 构造函数 重要的变量 线程池执行流程 任务队列workQueue 任务拒绝策略 线程池的关闭 ThreadPoolEx ...
- 第一篇 Spring boot 配置文件笔记
spring boot 不需要配置太多文件程序便可正常运行,特殊情况需要我们自己配置文件. 项目以IDEA写实例,系统会默认在src/main/java/resources目录下创建applicati ...
- JS输入框正则校验
1. 开发中需要对etl组件统一进行input输入框校验,允许为空,可以不校验,默认校验长度和特殊字符,代码如下,记录以备复用. /** * 数据值校验工具类 */ var checkService ...
- Hook技术--Activity的启动过程的拦截
1.寻找Hook点的原则 Android中主要是依靠分析系统源码类来做到的,首先我们得找到被Hook的对象,我称之为Hook点:什么样的对象比较好Hook呢?自然是容易找到的对象.什么样的对象容易找到 ...
- Kotlin入门(15)独门秘笈之特殊类
上一篇文章介绍了Kotlin的几种开放性修饰符,以及如何从基类派生出子类,其中提到了被abstract修饰的抽象类.除了与Java共有的抽象类,Kotlin还新增了好几种特殊类,这些特殊类分别适应不同 ...
- (网页)jQuery的时间datetime控件在AngularJs中使用实例
百度一下,自己也想了一下,有一种简单,无脑的方式分享给你: <input ng-model="start" id="start" placeholder= ...
- web测试之界面测试
所谓界面测试就是指,布局是否合理.整体风格是否一致.各个控件的放置位置是否符合客户使用习惯,此外还要测试界面操作便捷性.导航简单易懂性,页面元素的可用性,界面中文字是否正确,命名是否统一,页面是否美观 ...