自定义ItemToggleView

极力推荐文章:欢迎收藏
Android 干货分享

阅读五分钟,每日十点,和您一起终身学习,这里是程序员Android
本篇文章主要介绍 Android 开发中的部分知识点,通过阅读本篇文章,您将收获以下内容:
- 自定义View类实现
- 自定义View标签
- 自定义View 布局
- 自定义View 选择器
- 自定义View 素材
- Activity 自定义view布局引用
- Activity使用自定义View
自定义ItemToggleView 常用于Settings中,主要控制开关的开启与关闭。
自定义ItemToggleView实现效果如下:


1. 自定义View类实现
public class ItemToggleView extends RelativeLayout {
private static final String TAG = "ItemToggleView";
private TextView tv_title;
private TextView tv_des;
private static final String NAMESPACE = "http://schemas.android.com/apk/res/com.programandroid";
private String mDesTitle;
private String mDesOff;
private String mDesOn;
private ImageView mImageView;
private boolean isOnOFF;
public ItemToggleView(Context context, AttributeSet attrs, int defStyle) {
super(context, attrs, defStyle);
initAttrs(attrs);
initUI(context);
}
public ItemToggleView(Context context, AttributeSet attrs) {
super(context, attrs);
initAttrs(attrs);
initUI(context);
}
public ItemToggleView(Context context) {
super(context);
initUI(context);
}
// 单独抽取出来的 xml--->view
private void initUI(Context context) {
View.inflate(context, R.layout.item_toggle_view, this);
tv_title = (TextView) findViewById(R.id.tv_title);
tv_des = (TextView) findViewById(R.id.tv_des);
mImageView = (ImageView) findViewById(R.id.switch_imageview);
tv_title.setText(mDesTitle);
}
public boolean getCheck() {
return isOnOFF;
}
/**
* @param isCheck
* 传递一个选中未选中的状态变量(true 选中 false未选中)
*/
public void setCheck(boolean isCheck) {
// mSwitchControlView.setChecked(isCheck);
if (isCheck) {
tv_des.setText(mDesOn);
mImageView.setImageDrawable(getResources().getDrawable(
R.drawable.toggle_on));
} else {
tv_des.setText(mDesOff);
mImageView.setImageDrawable(getResources().getDrawable(
R.drawable.toggle_off));
}
isOnOFF = isCheck;
}
/**
* @param attrs
* 包含了属性名称和属性值的set集合
*/
private void initAttrs(AttributeSet attrs) {
// 打印属性总个数
/*
* Log.i(tag, "attrs.getAttributeCount() = "+attrs.getAttributeCount());
* for(int i=0;i<attrs.getAttributeCount();i++){ //获取所有的属性名称 Log.i(tag,
* "属性名称 = "+attrs.getAttributeName(i)); Log.i(tag,
* "属性值 = "+attrs.getAttributeValue(i)); }
*/
mDesTitle = attrs.getAttributeValue(NAMESPACE, "desTitle");
mDesOff = attrs.getAttributeValue(NAMESPACE, "desOff");
mDesOn = attrs.getAttributeValue(NAMESPACE, "desOn");
Log.i(TAG, mDesTitle);
Log.i(TAG, mDesOff);
Log.i(TAG, mDesOn);
}
}
2. 自定义View标签
1.注意 :自定义 Android 命名空间
同Android 命名空间(xmlns:android="http://schemas.android.com/apk/res/android" )方法一样,想使用自定义view的属性,必须声明自定义view的命名空间
(xmlns:programandroid="http://schemas.android.com/apk/res/com.programandroid")
2. 注意:自定义View 属性
自定义View 属性如下:
programandroid:desOff=" 不选中"
programandroid:desOn=" 选中"
programandroid:desTitle=" WIFI "
属性声明在res/values/attrs.xml中定义
<?xml version="1.0" encoding="utf-8"?>
<resources>
<declare-styleable name="ItemCheckView"><!--SettingItemView申明控件,内部可以包含自定义属性-->
<attr name="desTitle" format="string"/><!--标题描述属性-->
<attr name="desOff" format="string"/><!--关闭更新属性-->
<attr name="desOn" format="string"/><!--开启更新属性-->
</declare-styleable>
</resources>
3. 自定义View 布局
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_margin="5dp" >
<TextView
android:id="@+id/tv_title"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textColor="@android:color/primary_text_light"
android:textSize="18sp" />
<TextView
android:id="@+id/tv_des"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_below="@id/tv_title"
android:textColor="@android:color/secondary_text_light"
android:textSize="14sp" />
<ImageView
android:id="@+id/switch_imageview"
android:layout_width="50dp"
android:layout_height="wrap_content"
android:layout_alignParentRight="true"
android:layout_centerVertical="true"
android:src="@drawable/toggle_on" />
</RelativeLayout>
4. 自定义View 选择器
<?xml version="1.0" encoding="UTF-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<!-- 按下去的背景颜色显示效果 -->
<item android:drawable="@drawable/list_item_bg_light_pressed" android:state_pressed="true"/>
<!-- 获取焦点时背景颜色显示效果 -->
<item android:drawable="@drawable/list_item_bg_light_pressed" android:state_focused="true"/>
<!-- 没有任何状态下的背景颜色 -->
<item android:drawable="@drawable/list_item_bg_light_normal"/>
</selector>
5. 自定义View 素材


6. Activity 自定义view布局引用
<com.programandroid.CustomView.ItemToggleView
xmlns:programandroid="http://schemas.android.com/apk/res/com.programandroid"
android:id="@+id/custom_item_toggle_view"
android:layout_width="wrap_content"
android:layout_height="55dp"
android:background="@drawable/listview_item_selector"
programandroid:desOff=" 关闭"
programandroid:desOn=" 开启"
programandroid:desTitle=" WIFI " />
7. Activity使用自定义View
/**
* 自定义 ItemToggleView
*/
private void InitItemToggleView() {
// TODO Auto-generated method stub
final ItemToggleView mItemToggleView = (ItemToggleView) findViewById(R.id.custom_item_toggle_view);
mItemToggleView.setCheck(false);
mItemToggleView.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
mItemToggleView.setCheck(!mItemToggleView.getCheck());
}
});
}
至此,本篇已结束,如有不对的地方,欢迎您的建议与指正。同时期待您的关注,感谢您的阅读,谢谢!

自定义ItemToggleView的更多相关文章
- 自定义仿 IPhone 开关控件
极力推荐文章:欢迎收藏 Android 干货分享 阅读五分钟,每日十点,和您一起终身学习,这里是程序员Android 本篇文章主要介绍 Android 开发中的部分知识点,通过阅读本篇文章,您将收获以 ...
- 关于Unity3D自定义编辑器的学习
被人物编辑器折腾了一个月,最终还是交了点成品上去(还要很多优化都还么做). 刚接手这项工作时觉得没概念,没想法,不知道.后来就去看<<Unity5.X从入门到精通>>中有关于 ...
- 一起学微软Power BI系列-使用技巧(5)自定义PowerBI时间日期表
1.日期函数表作用 经常使用Excel或者PowerBI,Power Pivot做报表,时间日期是一个重要的纬度,加上做一些钻取,时间日期函数表不可避免.所以今天就给大家分享一个自定义的做日期表的方法 ...
- JavaScript自定义浏览器滚动条兼容IE、 火狐和chrome
今天为大家分享一下我自己制作的浏览器滚动条,我们知道用css来自定义滚动条也是挺好的方式,css虽然能够改变chrome浏览器的滚动条样式可以自定义,css也能够改变IE浏览器滚动条的颜色.但是css ...
- ASP.NET Aries 入门开发教程8:树型列表及自定义右键菜单
前言: 前面几篇重点都在讲普通列表的相关操作. 本篇主要讲树型列表的操作. 框架在设计时,已经把树型列表和普通列表全面统一了操作,用法几乎是一致的. 下面介绍一些差距化的内容: 1:树型列表绑定: v ...
- ASP.NET Aries 入门开发教程5:自定义列表页工具栏区
前言: 抓紧时间,继续写教程,因为发现用户期待的内容,都在业务处理那一块. 不得不继续勤劳了. 这节主要介绍工具栏区的玩法. 工具栏的默认介绍: 工具栏默认包括5个按钮,根据不同的权限决定显示: 添加 ...
- UWP中实现自定义标题栏
UWP中实现自定义标题栏 0x00 起因 在UWP开发中,有时候我们希望实现自定义标题栏,例如在标题栏中加入搜索框.按钮之类的控件.搜了下资料居然在一个日文网站找到了一篇介绍这个主题的文章: http ...
- JavaScript 自定义对象
在Js中,除了Array.Date.Number等内置对象外,开发者可以通过Js代码创建自己的对象. 目录 1. 对象特性:描述对象的特性 2. 创建对象方式:对象直接量.new 构造函数.Objec ...
- 【WCF】自定义错误处理(IErrorHandler接口的用法)
当被调用的服务操作发生异常时,可以直接把异常的原始内容传回给客户端.在WCF中,服务器传回客户端的异常,通常会使用 FaultException,该异常由这么几个东东组成: 1.Action:在服务调 ...
随机推荐
- 网络虚拟化基础协议·Geneve
[分层] 要实现网络虚拟化,最基础的技术肯定是分层(OverLay & UnderLay). ·UnderLay 中文释义中,老房子漏雨,在房子里面撑一把大雨伞,这把大雨伞就是UnderLay ...
- webpack4基础入门操作(一)
基于webpack4实践:开始:打开控制面板,制定到创建Webpack的文件夹. 并创建初始配置文件package.json 输入命令:npm init -y,在文件夹中出现一个package.jso ...
- 绝对是全网最好的Splay 入门详解——洛谷P3369&BZOJ3224: Tyvj 1728 普通平衡树 包教包会
平衡树是什么东西想必我就不用说太多了吧. 百度百科: 一个月之前的某天晚上,yuli巨佬为我们初步讲解了Splay,当时接触到了平衡树里的旋转等各种骚操作,感觉非常厉害.而第二天我调Splay的模板竟 ...
- Spring Boot + Elasticsearch 实现索引的日常维护
全文检索的应用越来越广泛,几乎成了互联网应用的标配,商品搜索.日志分析.历史数据归档等等,各种场景都会涉及到大批量的数据,在全文检索方面,方案无外乎Lucene.Solr.Elasticsearch三 ...
- 彻底透析SpringBoot jar可执行原理
文章篇幅较长,但是包含了SpringBoot 可执行jar包从头到尾的原理,请读者耐心观看.同时文章是基于SpringBoot-2.1.3进行分析.涉及的知识点主要包括Maven的生命周期以及自定 ...
- Excel中vlookup函数使用
https://baijiahao.baidu.com/s?id=1594684818733205984&wfr=spider&for=pc
- 《ElasticSearch6.x实战教程》正式推出(附图书抽奖)
经过接近1个月的时间,ElasticSearch6.x实战教程终于成册.这本实战教程小册有很多不足(甚至可能有错误),也是第一次完整推出一个系列的教程. 1年前,我开始真正接触ES,在此之前仅停留在知 ...
- LINUX_记录(一)
我有了一台电脑,有好多的硬件,CPU啊.内存啊.光驱啊.硬盘啊等等,我不想装windows,我想装linux,我就装了一个linux.事实上,可以跑,没问题,我在思考,why? 我装的linux,包括 ...
- GitHub & Git 的学习之始
唉,简单地说,感受只有四个字:蓝瘦香菇. 我的GitHub地址为: https://github.com/LinJingYun (这个,,我不知道具体从哪里找到自己地址啊) 接下来说一下我对git和 ...
- 牛客小白月赛16 E 小雨的矩阵 ( 暴搜)
链接:https://ac.nowcoder.com/acm/contest/949/E来源:牛客网 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 262144K,其他语言52428 ...