极力推荐文章:欢迎收藏

Android 干货分享

阅读五分钟,每日十点,和您一起终身学习,这里是程序员Android

本篇文章主要介绍 Android 开发中的部分知识点,通过阅读本篇文章,您将收获以下内容:

  1. 自定义View类实现
  2. 自定义View标签
  3. 自定义View 布局
  4. 自定义View 选择器
  5. 自定义View 素材
  6. Activity 自定义view布局引用
  7. 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的更多相关文章

  1. 自定义仿 IPhone 开关控件

    极力推荐文章:欢迎收藏 Android 干货分享 阅读五分钟,每日十点,和您一起终身学习,这里是程序员Android 本篇文章主要介绍 Android 开发中的部分知识点,通过阅读本篇文章,您将收获以 ...

  2. 关于Unity3D自定义编辑器的学习

    被人物编辑器折腾了一个月,最终还是交了点成品上去(还要很多优化都还么做).  刚接手这项工作时觉得没概念,没想法,不知道.后来就去看<<Unity5.X从入门到精通>>中有关于 ...

  3. 一起学微软Power BI系列-使用技巧(5)自定义PowerBI时间日期表

    1.日期函数表作用 经常使用Excel或者PowerBI,Power Pivot做报表,时间日期是一个重要的纬度,加上做一些钻取,时间日期函数表不可避免.所以今天就给大家分享一个自定义的做日期表的方法 ...

  4. JavaScript自定义浏览器滚动条兼容IE、 火狐和chrome

    今天为大家分享一下我自己制作的浏览器滚动条,我们知道用css来自定义滚动条也是挺好的方式,css虽然能够改变chrome浏览器的滚动条样式可以自定义,css也能够改变IE浏览器滚动条的颜色.但是css ...

  5. ASP.NET Aries 入门开发教程8:树型列表及自定义右键菜单

    前言: 前面几篇重点都在讲普通列表的相关操作. 本篇主要讲树型列表的操作. 框架在设计时,已经把树型列表和普通列表全面统一了操作,用法几乎是一致的. 下面介绍一些差距化的内容: 1:树型列表绑定: v ...

  6. ASP.NET Aries 入门开发教程5:自定义列表页工具栏区

    前言: 抓紧时间,继续写教程,因为发现用户期待的内容,都在业务处理那一块. 不得不继续勤劳了. 这节主要介绍工具栏区的玩法. 工具栏的默认介绍: 工具栏默认包括5个按钮,根据不同的权限决定显示: 添加 ...

  7. UWP中实现自定义标题栏

    UWP中实现自定义标题栏 0x00 起因 在UWP开发中,有时候我们希望实现自定义标题栏,例如在标题栏中加入搜索框.按钮之类的控件.搜了下资料居然在一个日文网站找到了一篇介绍这个主题的文章: http ...

  8. JavaScript 自定义对象

    在Js中,除了Array.Date.Number等内置对象外,开发者可以通过Js代码创建自己的对象. 目录 1. 对象特性:描述对象的特性 2. 创建对象方式:对象直接量.new 构造函数.Objec ...

  9. 【WCF】自定义错误处理(IErrorHandler接口的用法)

    当被调用的服务操作发生异常时,可以直接把异常的原始内容传回给客户端.在WCF中,服务器传回客户端的异常,通常会使用 FaultException,该异常由这么几个东东组成: 1.Action:在服务调 ...

随机推荐

  1. 图解kafka - 设计原理解析

    什么是消息队列? 简单来说,消息队列是存放消息的容器.客户端可以将消息发送到消息服务器,也可以从消息服务器获取消息. 问题导读: ********* 为什么需要消息系统? kafka架构? kafka ...

  2. iOS组件化开发一pod库包含MRC的文件处理(五)

    在做项目的过程中,建立了一个私有pod库,在这个库中存在mrc类文件这个时候如果在使用了arc的工程中引用这个pod的工程中手动设置当然也可以就是费时费力.现在我们来看看如何在私有库配置文件里配置自动 ...

  3. C++学习书籍推荐《C++编程思想第二版第一卷》下载

    百度云及其他网盘下载地址:点我 编辑推荐 “经典原版书库”是响应教育部提出的使用原版国外教材的号召,为国内高校的计算机教学度身订造的.<C++编程思想>(英文版第2版)是书库中的一本,在广 ...

  4. Jenkins部署Web项目到远程tomcat

    1.填加插件Deploy to container Plugin. 2.在构建任务中填加构建后操作.并做如下配置: WAR/EAR files:是war包的相对路径,如target/xxx.war c ...

  5. 齐治运维堡垒机后台存在命令执行漏洞(CNVD-2019-17294)分析

    基本信息 引用:https://www.cnvd.org.cn/flaw/show/CNVD-2019-17294 补丁信息:该漏洞的修复补丁已于2019年6月25日发布.如果客户尚未修复该补丁,可联 ...

  6. ElasticStack学习(八):ElasticSearch索引模板与聚合分析初探

    一.Index Template与Dynamic Template的概念 1.Index Template:它是用来根据提前设定的Mappings和Settings,并按照一定的规则,自动匹配到新创建 ...

  7. CMinpack使用介绍

    github: https://github.com/devernay/cminpack 主页: http://devernay.github.io/cminpack/ 使用手册: http://de ...

  8. MyBatis从入门到精通(1):MyBatis入门

    作为一个自学Java的自动化专业211大学本科生,在学习和实践过程中"趟了不少雷",所以有志于建立一个适合同样有热情学习Java技术的参考"排雷手册". 最近在 ...

  9. @ImportResource导入的xml配置里的Bean能够使用@PropertySource导入的属性值吗?

    每篇一句 大师都是偏执的,偏执才能产生力量,妥协是没有力量的.你对全世界妥协了你就是空气.所以若没有偏见,哪来的大师呢 相关阅读 [小家Spring]详解PropertyPlaceholderConf ...

  10. UVA1152- 枚举 /二分查找

    The SUM problem can be formulated as follows: given four lists A,B,C,D of integer values, compute ho ...