本文主要介绍如何使用一个可以响应各个方向CompoundDrawables点击操作的TextView。关于其实现原理见可以响应各个方向CompoundDrawables点击操作的TextView的实现原理。

TextView可以通过setCompoundDrawablesWithIntrinsicBounds在TextView内容的上下左右添加图片方便用户的需要,但默认并没有提供设置点击这些图片后响应操作的接口。本文介绍自己自定义的一个TextView达到此效果,主要功能为设置TextView各个方向图片的响应。

首先让我们看下效果


点击最下面的图片响应如上,执行结果为显示“Bottom”的Toast,可以下载Demo代码CompoundDrawablesTextViewDemo编译运行。

1、引入公共库

引入 TrineaAndroidCommon GoogleCode或(TrineaAndroidCommon Git)作为android项目的公共类,或是自己抽取其中的CompoundDrawablesTextView部分使用

2、在xml中配置

用现在的CompoundDrawablesTextView替换原来的TextView即可

<com.trinea.common.view.CompoundDrawablesTextViewandroid:id="@+id/textWithImage"android:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_marginTop="3dp"/>

3、在java类中调用

主要是设置TextView的CompoundDrawables和DrawableClickListener

CompoundDrawablesTextView textWithImage = (CompoundDrawablesTextView)this.findViewById(R.id.textWithImage);
textWithImage.setCompoundDrawablesWithIntrinsicBounds(R.drawable.image, R.drawable.image, R.drawable.image, R.drawable.image);
textWithImage.setDrawableClickListener(new ImageClickListener());class ImageClickListener implements DrawableClickListener {@Overridepublic void onClick(DrawablePosition position) {switch (position) {case LEFT:// 左边图片被点击的响应Toast.makeText(context, "left", Toast.LENGTH_SHORT).show();break;case RIGHT:// 右边图片被点击的响应Toast.makeText(context, "right", Toast.LENGTH_SHORT).show();break;case BOTTOM:// 底部图片被点击的响应Toast.makeText(context, "bottom", Toast.LENGTH_SHORT).show();break;case TOP:// 上边图片被点击的响应Toast.makeText(context, "top", Toast.LENGTH_SHORT).show();break;default:break;}}
}

可以根据自己需要补充上面switch中的响应函数即可

4、其他设置

4.1 设置图片可响应点击区域允许的误差

setLazy(int, int)表示设置Drawable可响应的点击区域x和y方向允许的误差,正数表示点击范围向外扩展,负数表示点击范围向内收缩

4.2 设置是否同时被点击的Drawable都响应

setAllDrawableTouchedResponse(boolean),表示是否所有被touch的Drawable都响应事件,true表示都响应,false表示按照左上右下的顺序响应第一个点击范围内的Drawable

注意:若点击的位置同时在多个图片的有效范围内,响应顺序为左上右下,设置 setAllDrawableTouchedResponse(boolean)为false后就按顺序响应第一个,其他被点击图片的响应忽略。

4.3 设置是否始终响应OnClickListener

setAlwaysClick(boolean)表示是否始终响应OnClickListener,true表示响应Drawable后依然响应OnClickListener,false表示响应Drawable后不再响应OnClickListener。

转载于:https://www.cnblogs.com/trinea/archive/2012/06/18/2557201.html

可以响应各个方向CompoundDrawables点击操作的TextView的使用相关推荐

  1. iOS设置键盘上Return按键及点击操作

    想要修该iOS键盘上Return按钮的样式变为搜索,并且监听它被点击了,做出响应, 先设置Return按键的样式, textField.returnKeyType = UIReturnKeySearc ...

  2. Unity 模拟鼠标点击操作

    有个奇奇怪怪的BUG,需要定时模拟鼠标点击 就想到了这个骚操作. C#本身带的类库中没有关于鼠标操作的函数库,需要引用微软的dll. 重点需要引入user32.dll,可以在C:\Windows\Sy ...

  3. python写界面输入测试脚本_python+Selenium自动化测试——输入,点击操作

    这是我的第一个真正意思上的自动化脚本. 1.练习的测试用例为: 打开百度首页,搜索"胡歌",然后检索列表,有无"胡歌的新浪微博"这个链接 2.在写脚本之前,需要 ...

  4. php 模拟鼠标点击,Python全局模拟鼠标点击操作(以至善网无聊评价点击作为案例)...

    Python全局模拟鼠标点击操作(以至善网无聊评价点击作为案例) 环境 python3 依赖 PyAutoGUI 简介 PyAutoGUI是一个纯Python的GUI自动化工具,其目的是可以用程序自动 ...

  5. 刷新浏览器后不进行任何点击操作时,不播放声音 | 解决方案(VUE-Element)

    以下代码可能过长,请耐心查阅 前言 最近项目中有播放背景声音的一个功能,后面发现刷新浏览器后,不对页面进行任何点击操作,浏览器不播放声音.作为一个后端开发,突然搞这么一个前端解决方案是有点懵逼的,下面 ...

  6. Appium 点击操作梳理

    Appium框架的客户端脚本中执行UI操作的原理是:脚本中需要执行UI操作时,会发送一条http请求(请求数据中包括了控件相关信息)到Appium的服务器,服务器再把接收到的数据转义一下,然后转发给安 ...

  7. 雷蛇鼠标的宏录制:鼠标位置和点击操作的记录

    雷蛇鼠标的宏录制:鼠标位置和点击操作的记录 下图提示了,是否录制屏幕的绝对位置:

  8. Android中区分滑动和点击操作

    问题:在Android应用中,如何区分用户的操作是点击操作还是滑动操作. 答: 当用户对应用内一个View控件操作时,我们在程序中对View进行绑定Touch事件的监听(android.view.Vi ...

  9. Python爬虫(7)selenium3种弹窗定位后点击操作,解决点击登录被隐藏iframe无法点击的登陆问题

    之前的文章有关于更多操作方式详细解答,本篇基于前面的知识点进行操作,如果不了解可以先看之前的文章 Python爬虫(1)一次性搞定Selenium(新版)8种find_element元素定位方式 Py ...

最新文章

  1. 技术人生:如何成为一位优秀的程序员
  2. WebSockets 简介
  3. 计算机硬件:内存常识知多少?内存知识盲区详解
  4. 远程过程调用失败_Java开发大型互联网RPC远程调用服务实现之问题处理方案
  5. 教你两种数据库覆盖式数据导入方法
  6. MFC | 基于文档存储的学生成绩信息管理系统
  7. 【教程搬运】廖雪峰Git的使用教程(二)
  8. 自动驾驶:车道线检测、车速检测、实时通行跟踪、基于视频的车辆跟踪及流量统计
  9. 深度实战Electron,开发本地音乐播放器
  10. 2012MDCC中国·移动开发者大会 邀请函
  11. 牛逼程序员职业提升必看的书
  12. NVIDIA apex安装
  13. vue報錯 To install it, you can run: npm install --save vue/types/umd
  14. register at least one qt version using“qt vs tools“->“qt options“
  15. 4.测试基础(软件测试阶段的划分)
  16. 英国全能数学家John Conway因新冠去世,他曾发明风靡一个时代的电脑游戏,还能心算万年历...
  17. ODI KM二次开发手册
  18. qml之Repeater
  19. 【MyBatis】进一步理解choose、when、otherwise标签
  20. phpcms mysql设置,PhpCms数据库管理设置教程 如何设置PhpCms数据库

热门文章

  1. oracle getsqltxt函数,Oracle 性能优化的基本方法概述(2)
  2. 神策数据桑文锋:让销售回归科学
  3. 情人节,你们的CEO都在干嘛?
  4. 在Linux上自动调整屏幕亮度保护眼睛
  5. 用HTTP协议连接网络(HttpURLConnection)
  6. Cubieboard2裸机开发之(四)定时器操作
  7. Delphi XE2 之 FireMonkey 入门(10) - 常用结构 TPoint、TPointF、TSmallPoint、TSize、TRect、TRectF 及相关方法...
  8. Discovery Session
  9. python for in list
  10. virtual background for conference