一步一步学android控件(之十六)—— CheckBox
根据使用场景不同,有时候使用系统默认的CheckBox样式就可以了,但是有时候就需要自定义CheckBox的样式。今天主要学习如何自定义CheckBox样式。在CheckBox状态改变时有时需要做一些额外的工作,可以在OnCheckedChangeListener做这些工作。所以今天的内容如下:
1、系统默认样式
2、自定义checkBox样式
3、使用OnCheckedChangeListener监听器监听CheckBox的选中状态。
先看一下效果图:
图一 图二
图一为默认样式和自定义样式,当checkBox的checked状态发生改变时弹出一个Toast提示框,如图二所示。
系统默认样式没啥可说的,下面主要讲讲如何自定义自己的样式
首先准备两张图片:
check_box_normal.jpg
check_box_checked.jpg
1、定义selector , check_box_style.xml:
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android"> <item android:drawable="@drawable/check_box_checked" android:state_checked="true"></item>
<item android:drawable="@drawable/check_box_normal"/> </selector>
2、定义CheckBox的样式:
<style name="check_box_theme" ><!-- parent="@android:style/Widget.CompoundButton.CheckBox" -->
<item name="android:button">@drawable/check_box_style</item>
<item name="android:textColor">@color/text_view_stroke</item>
</style>
3、在checkBox中使用该样式:
<CheckBox
android:id="@+id/show_checkbox_style_customer"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/customer_checkbox_style"
style="@style/check_box_theme"/>
4、监听CheckBox状态变化
mCheckBoxCustomer.setOnCheckedChangeListener(this);
选中状态改变,doSometing
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
Toast.makeText(this, "check box state changed !..", Toast.LENGTH_LONG).show();
}
下面是详细代码:
1、布局文件widget_checkbox_layout.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:gravity="center_horizontal"
android:orientation="vertical" > <CheckBox
android:id="@+id/show_checkbox_style"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/default_checkbox_style" />
<CheckBox
android:id="@+id/show_checkbox_style_customer"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/customer_checkbox_style"
style="@style/check_box_theme"/> </LinearLayout>
2、activity——WidgetCheckBoxActivity.java
package com.xy.zt.selfdefinewieget; import android.app.Activity;
import android.os.Bundle;
import android.widget.CheckBox;
import android.widget.CompoundButton;
import android.widget.Toast;
import android.widget.CompoundButton.OnCheckedChangeListener; public class WidgetCheckBoxActivity extends Activity implements OnCheckedChangeListener{
CheckBox mCheckBoxDefault ;
CheckBox mCheckBoxCustomer ;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.widget_checkbox_layout);
init();
} private void init(){
mCheckBoxDefault = (CheckBox) findViewById(R.id.show_checkbox_style);
mCheckBoxDefault.setOnCheckedChangeListener(this); mCheckBoxCustomer = (CheckBox) findViewById(R.id.show_checkbox_style_customer);
mCheckBoxCustomer.setOnCheckedChangeListener(this);
} public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
Toast.makeText(this, "check box state changed !..", Toast.LENGTH_LONG).show();
}
}
3、在ViewData.java和WidgetsAdapter中分别添加如下内容:
ViewData.java
public static final int CHECK_BOX_ID = DEGITAL_CLOCK_ID + 1;
public static final String CHECK_BOX_NAME = "CheckBox";
private static final ViewData mCheckBox = new ViewData(CHECK_BOX_NAME,
CHECK_BOX_ID);
View_Datas.add(mCheckBox);
WidgetsAdapter的handleItemClicked方法:
case ViewData.CHECK_BOX_ID:
intent.setClass(mContext, WidgetCheckBoxActivity.class);
mContext.startActivity(intent);
break;
对第三点有不清楚的地方参见文章一步一步学android控件(之一) —— 开始篇
CheckBox控件就学到这里,下一篇文章学习 RadioButton & RadioGroup 。
一步一步学android控件(之十六)—— CheckBox的更多相关文章
- 一步一步学android控件(之十五) —— DegitalClock & AnalogClock
原本计划DigitalClock和AnalogClock单独各一篇来写,但是想想,两个控件的作用都一样,就和在一起写一篇了. DegitalClock和AnalogClock控件主要用于显示当前时间信 ...
- 一步一步学android控件(之六) —— MultiAutoCompleteTextView
今天学习的控件是MultiAutoCompleteTextView . 提到MultiAutoCompleteTextView 我们就自然而然地想到AutoCompleteTextView ,就想知道 ...
- 一步一步学android控件(之二十五)—— SeekBar
SeekBar扩展自ProgressBar——在ProgressBar的基础上添加了一个用户可以拖拽的thum. SeekBar.OnSeekBarChangeListener是接收SeekBar进度 ...
- python selenium 处理时间日期控件(十六)
测试过程中经常遇到时间控件,需要我们来选择日期,一般处理时间控件通过层级定位来操作或者通过调用js来实现. 1.首先我们看一下如何通过层级定位来操作时间控件. 通过示例图可以看到,日期控件是无法输入日 ...
- Android 控件架构及View、ViewGroup的测量
附录:示例代码地址 控件在Android开发的过程中是必不可少的,无论是我们在使用系统控件还是自定义的控件.下面我们将讲解一下Android的控件架构,以及如何实现自定义控件. 1.Android控件 ...
- Android控件TextView的实现原理分析
文章转载至CSDN社区罗升阳的安卓之旅,原文地址:http://blog.csdn.net/luoshengyang/article/details/8636153 在前面一个系列的文章中,我们以窗口 ...
- Android群英传笔记——第三章:Android控件架构与自定义控件讲解
Android群英传笔记--第三章:Android控件架构与自定义控件讲解 真的很久没有更新博客了,三四天了吧,搬家干嘛的,心累,事件又很紧,抽时间把第三章大致的看完了,当然,我还是有一点View的基 ...
- Android控件GridView之仿支付宝钱包首页带有分割线的GridView九宫格的完美实现
Android控件GridView之仿支付宝钱包首页带有分割线的GridView九宫格的完美实现 2015-03-10 22:38 28419人阅读 评论(17) 收藏 举报 分类: Android ...
- [Android Pro] android控件ListView顶部或者底部也显示分割线
reference to : http://blog.csdn.net/lovexieyuan520/article/details/50846569 在默认的Android控件ListView在 ...
随机推荐
- 关于怎样拆毁Cuttheprice
最近我的chrome浏览器被一个叫cuttheprice的插件病毒感染了,总是弹出广告,真是让人抓狂,本来最近几天在复习算法,准备面试的,昨天忍了过去,今天实在受不了了,于是就干掉它吧.说干就干,刚开 ...
- oracle删除表的方法
1. 删除oracle表中的所有数据而不删除表: 语法: TRUNCATE TABLE table_name; 使用这条语句只是删除表中的全部数据,不是删除表,这种方式也叫做截断表,这种方式比使用de ...
- Spring+MyBatis实践—登录和权限控制
1.实现用户登录功能: 通过session来实现用户登录功能.在用户登录时,将用户的相关信息放在HttpSession对象用,其中HttpSession对象可以通过HttpServletRequest ...
- ZOJ 3603 Draw Something Cheat
点我看题目 题意 : 给你n个字符串,让你找出在每个字符串中出现的字母,按字典序输出来. 思路 :一开始想差了,以为记录下每个字符出现次数,然后找次数大于1的,可是我忘了可能在一个字符串中有AA,而另 ...
- PHP 系统常量及自定义常量
__FILE__ 这个默认常量是 PHP 程序文件名.若引用文件 (include 或 require)则在引用文件内的该常量为引用文件名,而不是引用它的文件名. __LINE__ 这个默认常量是 P ...
- 文件过滤驱动实现目录重定向(一)good
文件过滤驱动拦截的IRP主要包括以下几个:IRP_MJ_CREATE,文件创建操作,文件的任何操作,都是从这里开始的.IRP_MJ_CLEANUP,文件的HANDLE句柄全部关闭会触发这个消息IRP_ ...
- SQL Server中时间段查询和数据类型转换
不知道什么时候对数据独有情种,也许是因为所学专业的缘故,也许是在多年的工作中的亲身经历,无数据,很多事情干不了,数据精度不够,也很多事情干不了,有一次跟一个朋友开玩笑说,如果在写论文的时候,能有一份独 ...
- gif录制工具
gif录制工具 This tool allows you to record a selected area of your screen and save it as a Gif. http://s ...
- [CF 191C]Fools and Roads[LCA Tarjan算法][LCA 与 RMQ问题的转化][LCA ST算法]
参考: 1. 郭华阳 - 算法合集之<RMQ与LCA问题>. 讲得很清楚! 2. http://www.cnblogs.com/lazycal/archive/2012/08/11/263 ...
- C# 6和 VB 12的最新特性列表
随着下个版本的C#发布日逐渐临近,那些还没有完成的特性必须被砍掉.最近从特性列表中被砍掉的特性包括主要构造函数(primary constructor)和声明表达式(declaration expre ...