文档章节

android 自定义view的xml属性,attrs.xml汇总

Typer
 Typer
发布于 2015/05/09 15:13
字数 991
阅读 102
收藏 1

CSDN博客已经不在使用,,转载请注明出处:http://my.oschina.net/witype716/blog/412739

       对于自定义的组件,我们不仅可以利用view自带的xml属性进行布局控制还可以通过自定义xml属性的方式实现对view的控制.下面就通过我自己的一个小demo给大家演示一下具体的操作流程.大神请移步!!!

本文中的xml属性续 switch button android仿iso7扁平开关按钮详情请移步。

原理解析:

       我们一般写xml属性时一般都是android:****的格式,其中的android是命名空间,关于什么是命名空间,这不是本文讨论的范围。一般来说,在xml文件的根部我们都会加上 xmlns:android="http://schemas.android.com/apk/res/android",这其实是android定义好的命名空间。

自定义view的xml属性

       当然我也可以使用自己定义的xml属性,下面我们来定义一些属性,这时候我就需要在android工程目录下的res/values/下新建一个attrs.xml文件,

内如如下

</pre><pre name="code" class="html"><?xml version="1.0" encoding="utf-8"?>
<resources>
    <declare-styleable name="sliding_switch">
        <attr name="backgroundOn" format="color"/>
        <attr name="backgroundOff" format="color"/>
        <attr name="space" format="dimension"/>
        <attr name="slideColor" format="color"/>
        <attr name="isCheck" format="boolean"/>
        <attr name="width">
            <enum name="wrap_content" value="1"/>
            <enum name="fill_parent" value="2"/>
        </attr>
        <attr name="height">
            <enum name="wrap_content" value="1"/>
            <enum name="fill_parent" value="2"/>
        </attr>
    </declare-styleable>
</resources>

       

      这个时候一个自定义的view属性文件就定义好了,接下来就是怎么去用这些属性,上面xml代码中的format部分是xml属性的有效值,那么这些属性的有效值有那些呢,通常情况下有color integer string reference dimension这些基本的类型,分别代表颜色,整型 字符串 图片资源id,尺寸资源id.想要了解更多的同学请看下边。


<!-- reference:参考某一资源ID。例如:android:background = "@drawable/图片ID" -->
<attr name = "background" format = "reference" /> 
<!-- color:颜色值。例如:android:textColor = "#00FF00"-->
<attr name = "textColor" format = "color" /> 
<attr name = "focusable" format = "boolean" />
<attr name = "layout_width" format = "dimension" />
<attr name = "fromAlpha" format = "float" />
<attr name = "frameDuration" format="integer" />
<attr name = "apiKey" format = "string" />
<!-- fraction:百分数。-->
<attr name = "pivotX" format = "fraction" />
<!-- enum:枚举值。-->
<attr name="orientation">
   <enum name="horizontal" value="0" />
    <enum name="vertical" value="1" />
</attr>
<!--flag:位或运算。-->
<attr name="windowSoftInputMode">
   <flag name = "stateUnspecified" value = "0" />
   <flag name = "stateUnchanged" value = "1" />
   <flag name = "stateHidden" value = "2" />
   <flag name = "stateAlwaysHidden" value = "3" />
   <flag name = "stateVisible" value = "4" />
   <flag name = "stateAlwaysVisible" value = "5" />
   <flag name = "adjustUnspecified" value = "0x00" />
   <flag name = "adjustResize" value = "0x10" />
   <flag name = "adjustPan" value = "0x20" />
   <flag name = "adjustNothing" value = "0x30" />
</attr>


特别要注意:属性定义时可以指定多种类型值。例如:

<attr name = "background" format = "reference|color" />


在xml中使用xml自定义属性

      我们需要在xml布局文件的根节点定义一个命名空间,关于什么是xml命名空间请自行百度吧.

这是程序当中使用的命名空间,其中res/后是你自定义view java文件的包名

<RelativeLayout xmlns="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res/open.witype.slidingbutton" 
    android:layout_width="fill_parent"
    android:layout_height="wrap_content" >
    <open.witype.slidingSwitch.SlidingButton 
        android:id="@+id/switch_b"
        app:backgroundOn="@color/withe"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content" />
</RelativeLayout>

一般情况下,你只要在xml中申明了对应的命名空间,可以通过和使用android命名空间一样,直接能提示出attrs中的属性,如果没有提示也不要担心,用手写上去也是不会报错的,


在view中接收xml属性

在你自己的view中你必须实现view的构造方法

public SlidingButton(Context context, AttributeSet attrs) {
		super(context, attrs);
		// TODO Auto-generated constructor stub
		TypedArray ta = context.obtainStyledAttributes(attrs,R.styleable.sliding_switch);
		int c_color = ta.getColor(R.styleable.sliding_switch_slideColor,Color.rgb(255, 255, 255));
		int t_color = ta.getColor(R.styleable.sliding_switch_backgroundOn,Color.rgb(98, 195, 208));
		int f_color = ta.getColor(R.styleable.sliding_switch_backgroundOff, Color.rgb(220, 220, 220));
	}

整个流程就是这样. 


© 著作权归作者所有

Typer
粉丝 0
博文 3
码字总数 3869
作品 0
渝中
私信 提问
番外篇2:自定义View属性全解

前言 在android自定义view的过程中,偶尔会涉及到设置外部资源的问题。那么今天就来讲讲自定义view属性的问题吧。 今天涉及的知识有: 创建 attrs.xml文件及其属性讲解 在自定义view中调用及...

奔跑的佩恩
04/17
0
0
QQ运动步数&自定义ProgressBar

效果如下 gif图展示效果不好,实际体验无卡顿 1.自定义属性 早Values目录下New-values resource file,命名为attrs.xml(命名随意,但规范命名为attrs.xml) 自定义属性如下,注意format不要与...

木头同学
2018/08/16
0
0
Android中资源管理机制详解

在Android中,所有的资源都在res目录下存放,包括drawable,layout,strings,anim等等,当我们向工程中加入任何一个资源时,会在R类中相应会为该 资源分配一个id,我们在应用中就是通过这个i...

恰同学少年
2015/08/03
0
0
Android自定义控件以及控件属性的自定义

自定义控件在android中无处不见,自定义控件给了我们很大的方便。比如说,一个视图为imageview ,imagebutton ,textview 等诸多控件的组合,用的地方有很多,我们不可能每次都来写3个的组合,...

蜗牛崛起
2015/08/14
0
0
几种开发UI界面的方式demo Android

下面用demo说明: 1.######## 用编程的方式开发UI界面 2014年5月13日 上午6:07 ################## / 用编程的方式开发UI界面 / // 创建一个线性布局管理器 LinearLayout layout = new Line...

今日竹石
2014/05/13
0
0

没有更多内容

加载失败,请刷新页面

加载更多

Qt编写数据可视化大屏界面电子看板9-曲线效果

一、前言 为了编写数据可视化大屏界面电子看板系统,为了能够兼容Qt4和嵌入式linux系统,尤其是那种主频很低的,但是老板又需要在这种硬件上(比如树莓派、香橙派、全志H3、imx6)展示这么华...

飞扬青云
9分钟前
0
0
责任链模式

//这篇博客的博主真的不错,解析的都很清晰明了, https://blog.csdn.net/jason0539/article/details/45091639

南桥北木
35分钟前
3
0
Flutter -------- dio网络请求

dio是Flutter中文网开源的一个强大的Dart Http请求库,支持Restful API、FormData、拦截器、请求取消、Cookie管理、文件上传/下载、超时等... 1.添加依赖# dependencies: dio: 2.1.x #...

切切歆语
45分钟前
1
0
PHP的学习

PHP变量的命名必须以$符开始,如: $i;$j;$name; $符后面的第一个字符不可以是数字,只能是字母或者下划线(_)。 除了下划线(_)之外,变量中不能出现任何特殊字符,也就是变量只能包含...

墨冥
今天
3
0
一篇文章彻底搞懂Java虚拟机

概念: 虚拟机:指以软件的方式模拟具有完整硬件系统功能、运行在一个完全隔离环境中的完整计算机系统 ,是物理机的软件实现。常用的虚拟机有VMWare,Visual Box,Java Virtual Machine(Jav...

骚年锦时
今天
4
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部