极力推荐文章:欢迎收藏

Android 干货分享

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

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

  1. 自定义View类实现
  2. 自定义View标签
  3. 自定义View 布局
  4. 自定义View 选择器
  5. 自定义View 素材
  6. Activity 自定义view布局引用
  7. Activity使用自定义View

自定义ItemToggleView 常用于Settings中,主要控制开关的开启与关闭。

自定义ItemToggleView实现效果如下:



1. 自定义View类实现

  1. public class ItemToggleView extends RelativeLayout {
  2. private static final String TAG = "ItemToggleView";
  3. private TextView tv_title;
  4. private TextView tv_des;
  5. private static final String NAMESPACE = "http://schemas.android.com/apk/res/com.programandroid";
  6. private String mDesTitle;
  7. private String mDesOff;
  8. private String mDesOn;
  9. private ImageView mImageView;
  10. private boolean isOnOFF;
  11. public ItemToggleView(Context context, AttributeSet attrs, int defStyle) {
  12. super(context, attrs, defStyle);
  13. initAttrs(attrs);
  14. initUI(context);
  15. }
  16. public ItemToggleView(Context context, AttributeSet attrs) {
  17. super(context, attrs);
  18. initAttrs(attrs);
  19. initUI(context);
  20. }
  21. public ItemToggleView(Context context) {
  22. super(context);
  23. initUI(context);
  24. }
  25. // 单独抽取出来的 xml--->view
  26. private void initUI(Context context) {
  27. View.inflate(context, R.layout.item_toggle_view, this);
  28. tv_title = (TextView) findViewById(R.id.tv_title);
  29. tv_des = (TextView) findViewById(R.id.tv_des);
  30. mImageView = (ImageView) findViewById(R.id.switch_imageview);
  31. tv_title.setText(mDesTitle);
  32. }
  33. public boolean getCheck() {
  34. return isOnOFF;
  35. }
  36. /**
  37. * @param isCheck
  38. * 传递一个选中未选中的状态变量(true 选中 false未选中)
  39. */
  40. public void setCheck(boolean isCheck) {
  41. // mSwitchControlView.setChecked(isCheck);
  42. if (isCheck) {
  43. tv_des.setText(mDesOn);
  44. mImageView.setImageDrawable(getResources().getDrawable(
  45. R.drawable.toggle_on));
  46. } else {
  47. tv_des.setText(mDesOff);
  48. mImageView.setImageDrawable(getResources().getDrawable(
  49. R.drawable.toggle_off));
  50. }
  51. isOnOFF = isCheck;
  52. }
  53. /**
  54. * @param attrs
  55. * 包含了属性名称和属性值的set集合
  56. */
  57. private void initAttrs(AttributeSet attrs) {
  58. // 打印属性总个数
  59. /*
  60. * Log.i(tag, "attrs.getAttributeCount() = "+attrs.getAttributeCount());
  61. * for(int i=0;i<attrs.getAttributeCount();i++){ //获取所有的属性名称 Log.i(tag,
  62. * "属性名称 = "+attrs.getAttributeName(i)); Log.i(tag,
  63. * "属性值 = "+attrs.getAttributeValue(i)); }
  64. */
  65. mDesTitle = attrs.getAttributeValue(NAMESPACE, "desTitle");
  66. mDesOff = attrs.getAttributeValue(NAMESPACE, "desOff");
  67. mDesOn = attrs.getAttributeValue(NAMESPACE, "desOn");
  68. Log.i(TAG, mDesTitle);
  69. Log.i(TAG, mDesOff);
  70. Log.i(TAG, mDesOn);
  71. }
  72. }

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 属性如下:

  1. programandroid:desOff=" 不选中"
  2. programandroid:desOn=" 选中"
  3. programandroid:desTitle=" WIFI "

属性声明在res/values/attrs.xml中定义

  1. <?xml version="1.0" encoding="utf-8"?>
  2. <resources>
  3. <declare-styleable name="ItemCheckView"><!--SettingItemView申明控件,内部可以包含自定义属性-->
  4. <attr name="desTitle" format="string"/><!--标题描述属性-->
  5. <attr name="desOff" format="string"/><!--关闭更新属性-->
  6. <attr name="desOn" format="string"/><!--开启更新属性-->
  7. </declare-styleable>
  8. </resources>

3. 自定义View 布局

  1. <?xml version="1.0" encoding="utf-8"?>
  2. <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
  3. android:layout_width="match_parent"
  4. android:layout_height="wrap_content"
  5. android:layout_margin="5dp" >
  6. <TextView
  7. android:id="@+id/tv_title"
  8. android:layout_width="wrap_content"
  9. android:layout_height="wrap_content"
  10. android:textColor="@android:color/primary_text_light"
  11. android:textSize="18sp" />
  12. <TextView
  13. android:id="@+id/tv_des"
  14. android:layout_width="wrap_content"
  15. android:layout_height="wrap_content"
  16. android:layout_below="@id/tv_title"
  17. android:textColor="@android:color/secondary_text_light"
  18. android:textSize="14sp" />
  19. <ImageView
  20. android:id="@+id/switch_imageview"
  21. android:layout_width="50dp"
  22. android:layout_height="wrap_content"
  23. android:layout_alignParentRight="true"
  24. android:layout_centerVertical="true"
  25. android:src="@drawable/toggle_on" />
  26. </RelativeLayout>

4. 自定义View 选择器

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <selector xmlns:android="http://schemas.android.com/apk/res/android">
  3. <!-- 按下去的背景颜色显示效果 -->
  4. <item android:drawable="@drawable/list_item_bg_light_pressed" android:state_pressed="true"/>
  5. <!-- 获取焦点时背景颜色显示效果 -->
  6. <item android:drawable="@drawable/list_item_bg_light_pressed" android:state_focused="true"/>
  7. <!-- 没有任何状态下的背景颜色 -->
  8. <item android:drawable="@drawable/list_item_bg_light_normal"/>
  9. </selector>

5. 自定义View 素材



6. Activity 自定义view布局引用

  1. <com.programandroid.CustomView.ItemToggleView
  2. xmlns:programandroid="http://schemas.android.com/apk/res/com.programandroid"
  3. android:id="@+id/custom_item_toggle_view"
  4. android:layout_width="wrap_content"
  5. android:layout_height="55dp"
  6. android:background="@drawable/listview_item_selector"
  7. programandroid:desOff=" 关闭"
  8. programandroid:desOn=" 开启"
  9. programandroid:desTitle=" WIFI " />

7. Activity使用自定义View

  1. /**
  2. * 自定义 ItemToggleView
  3. */
  4. private void InitItemToggleView() {
  5. // TODO Auto-generated method stub
  6. final ItemToggleView mItemToggleView = (ItemToggleView) findViewById(R.id.custom_item_toggle_view);
  7. mItemToggleView.setCheck(false);
  8. mItemToggleView.setOnClickListener(new OnClickListener() {
  9. @Override
  10. public void onClick(View v) {
  11. // TODO Auto-generated method stub
  12. mItemToggleView.setCheck(!mItemToggleView.getCheck());
  13. }
  14. });
  15. }

至此,本篇已结束,如有不对的地方,欢迎您的建议与指正。同时期待您的关注,感谢您的阅读,谢谢!

自定义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. ES5_03_Object扩展

    ES5给Object扩展了一些静态方法, 常用的2个: 1. Object.create(prototype, [descriptors]) * 作用: 以指定对象为原型创建新的对象 * 为新的对象指 ...

  2. 你所不知的spring与mybatis整合方法

    内容目录 1.采用MapperScannerConfigurer2.采用接口org.apache.ibatis.session.SqlSession的实现类org.mybatis.spring.Sql ...

  3. python的比较关系运算符和逻辑运算符

    比较运算符 运算符 描述 示例 == 检查两个操作数的值是否相等,如果是则条件变为真. 如a=2,b=2则(a == b) 为 true. != 检查两个操作数的值是否相等,如果值不相等,则条件变为真 ...

  4. iOS中 分类(category)与扩展(Extension)的区别?

    1.分类(category)的作用 (1).作用:可以在不修改原来类的基础上,为一个类扩展方法.(2).最主要的用法:给系统自带的类扩展方法. 2.分类中能写点啥? (1).分类中只能添加“方法”,不 ...

  5. Codeforces Gym101257F:Islands II(求割点+思维)

    http://codeforces.com/gym/101257/problem/F 题意:给出一个n*m的地图,上面相同数字的代表一个国家,问对于每个国家有多少个国家在它内部(即被包围).例如第一个 ...

  6. Spring Cloud Alibaba | Nacos服务注册与发现

    目录 Spring Cloud Alibaba | Nacos服务注册与发现 1. 服务提供者 1.1 pom.xml项目依赖 1.2 配置文件application.yml 1.3 启动类Produ ...

  7. Bzoj 3166 [Heoi2013] Alo 题解

    3166: [Heoi2013]Alo Time Limit: 20 Sec  Memory Limit: 256 MBSubmit: 1118  Solved: 518[Submit][Status ...

  8. MyBatis 使用枚举或其他对象

    From<Mybatis从入门到精通> 1.笔记: <!-- 6.3 使用枚举或者其他对象 6.3.1 使用MyBatis提供的枚举处理器 不懂: 因为枚举除了本身的字面值外,还可以 ...

  9. Samba与nfs与ftp

    Samba服务 samba是一个网络服务器,用于Linux和Windows之间共享文件. samba端口号 samba (启动时会预设多个端口) 数据传输的TCP端口 139.445 进行NetBIO ...

  10. .net持续集成cake篇之使用vs或者vscode来辅助开发cake脚本

    使用Visual Studio来开发工具 前面我们都是通过手写或者复制的方法来编写Cake文件,Cake使用的是C#语言,如果仅使用简单的文本编辑器来编写显然效率是非常低下的,本节我们讲解如何使用ca ...