设为首页 加入收藏

TOP

Android 自定义控件外观
2014-11-24 13:55:49 来源: 作者: 【 】 浏览:1
Tags:Android 定义 控件 外观

本文只讨论外观修改,在系统控件上进行功能扩充的自定义控件另外讨论。


首先我们看下系统的RadioButton:


RadioButton长成什么样子是由其Background、Button等属性决定的,Android系统使用style定义了默认的属性,在android源码


android/frameworks/base/core/res/res/values/styles.xml中可以看到默认的定义:


即其背景图是btn_radio_label_background,其button的样子是btn_radio


btn_radio_label_background是什么?


其路径是android/frameworks/base/core/res/res/drawable-mdpi/btn_radio_label_background.9.png


可以看到是一个NinePatch图片,用来做背景,可以拉伸填充。


btn_radio是什么?


其路径是android/frameworks/base/core/res/res/drawable/btn_radio.xml


是个xml定义的drawable,打开看其内容:


定义了不同状态下radioButton长成什么样子。
如果不知道selector是什么,就要去看下Android SDK文档中Dev Guide->Application Resources->Resource Types。
以下面一个item为例:
android:drawable="@drawable/btn_radio_on_pressed" />
意思即为当radiobutton被选中时,并且被按下时,其Button应该长成btn_radio_on_pressed这个样子。

文件是android/frameworks/base/core/res/res/drawable-mdpi/btn_radio_on_pressed.png

drawable的item中可以有以下属性:
android:drawable="@[package:]drawable/drawable_resource"
android:state_pressed=["true" | "false"]
android:state_focused=["true" | "false"]
android:state_selected=["true" | "false"]
android:state_active=["true" | "false"]
android:state_checkable=["true" | "false"]
android:state_checked=["true" | "false"]
android:state_enabled=["true" | "false"]
android:state_window_focused=["true" | "false"]
当按钮的状态和某个item匹配后,就会使用此item定义的drawable作为按钮图片。

从上面分析我们如果要修改RadioButton的外观,那么步骤应该是:
(1)制作一个9patch的图片作为背景图
准备一副PNG图片,其中白色为透明色,是否需要透明各人根据自己需要决定。

运行SDK/tools/draw9patch
在可伸缩的范围周围加上黑色的线告知系统这些区域可以伸缩。
制作完的图片,周围多了黑色线。

(2)针对不同的状态提供按钮图片
enabled, on: 紫色外框、红色中心点

enabled, off:只有紫色外框

enabled, on, pressed:黄色外框,红色中心点

enabled, off, pressed:黄色外框

disabled, on: 灰色外框、灰色中心点

disabled, off: 灰色外框

其余的状态此处就不再定义。




】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇Android布局方式之表格布局管理器.. 下一篇Android Linux 开发环境搭建

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容: