pjsip视频通信开发(上层应用)之EditText重写

我们经常使用手机的打电话功能,当我们按键盘的时候,有一个地方显示我们按键的内容,当我们的手点击那个地方的时候,并没有弹出软件盘,所以我们再有数字键盘的时候,要屏蔽系统的软件盘。

我们分析一下,软件盘弹出的条件:

1、焦点,当EditText处于焦点的时候,会自动弹出软件盘,所以我们要重写onFocusChanged函数

2、触摸时间,当你点击EditText的时候,那它就会处于焦点,所以我们要重写onTouchEvent函数

3、当布局改变的时候,EditText也会处于焦点,所以我们也应该重写一下layout函数

 

package com.jwzhangjie.pjsip.ui.dialpad;import android.content.Context;
import android.graphics.Rect;
import android.text.InputType;
import android.util.AttributeSet;
import android.view.MotionEvent;
import android.view.accessibility.AccessibilityEvent;
import android.view.inputmethod.InputMethodManager;
import android.widget.EditText;/*** 数字输入,暂时不支持字母输入所以把软键盘全部屏蔽* * @author jwzhangjie*/
public class DigitsEditText extends EditText {public DigitsEditText(Context context) {super(context);init();}public DigitsEditText(Context context, AttributeSet attrs) {super(context, attrs);init();}public DigitsEditText(Context context, AttributeSet attrs, int defStyle) {super(context, attrs, defStyle);init();}private void init() {//设置一行显示this.setInputType(InputType.TYPE_NULL);}@Overridepublic boolean onTouchEvent(MotionEvent event) {final boolean ret = super.onTouchEvent(event);// Must be done after super.onTouchEvent()applyKeyboardShowHide();return ret;}@Overridepublic void sendAccessibilityEventUnchecked(AccessibilityEvent event) {if (event.getEventType() == AccessibilityEvent.TYPE_VIEW_TEXT_CHANGED) {// Since we're replacing the text every time we add or remove a// character, only read the difference. (issue 5337550)final int added = event.getAddedCount();final int removed = event.getRemovedCount();final int length = event.getBeforeText().length();if (added > removed) {event.setRemovedCount(0);event.setAddedCount(1);event.setFromIndex(length);} else if (removed > added) {event.setRemovedCount(1);event.setAddedCount(0);event.setFromIndex(length - 1);} else {return;}} else if (event.getEventType() == AccessibilityEvent.TYPE_VIEW_FOCUSED) {// The parent EditText class lets tts read "edit box" when this View// has a focus, which// confuses users on app launch (issue 5275935).return;}super.sendAccessibilityEventUnchecked(event);}@Overrideprotected void onLayout(boolean changed, int left, int top, int right,int bottom) {super.onLayout(changed, left, top, right, bottom);// Here we ensure that we hide the keyboard// Since this will be fired when virtual keyboard this will probably// blink but for now no better way were found to hide keyboard for sureapplyKeyboardShowHide();}@Overrideprotected void onFocusChanged(boolean focused, int direction,Rect previouslyFocusedRect) {super.onFocusChanged(focused, direction, previouslyFocusedRect);if (focused) {applyKeyboardShowHide();} else {final InputMethodManager imm = ((InputMethodManager) getContext().getSystemService(Context.INPUT_METHOD_SERVICE));if (imm != null && imm.isActive(this)) {imm.hideSoftInputFromWindow(getApplicationWindowToken(), 0);}}}private void applyKeyboardShowHide() {final InputMethodManager imm = ((InputMethodManager) getContext().getSystemService(Context.INPUT_METHOD_SERVICE));if (imm != null) {if (imm.isActive(this)) {imm.hideSoftInputFromWindow(getApplicationWindowToken(), 0);}}}}

 

转载于:https://www.cnblogs.com/pangblog/p/3395460.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/400034.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

JavaWeb重要知识点总结

JavaWeb学习篇之----容器Response详解http://blog.csdn.net/jiangwei0910410003/article/details/22886847获得所有请求头名称和头信息java.util.Enumeration names request.getHeaderNames();System.out.println("");while(names.hasMoreElements()){String name …

pycharm 中HTML代码的对齐

以前用sublime ,现在django要在pycharm编辑html,要实现html的格式化, 用快捷键 CtrlAltL 非常实用

树莓派安装Ubuntu MATE及ROS系统

目录解锁SSH换源安装VNC服务安装ROS初始化rosdep和环境测试平台:树莓派4B 系统版本: ubuntu-mate-20.04.1-desktop-armhfraspi.img 在Raspberry Pi Download Options下载系统镜像 在树莓派资源下载 | 树莓派实验室下载工具 使用SDForm…

mysql 清空表的两种方法

一、Delete DELETE FROM table; 二、Truncate TRUNCATE table; 第一种方法其实就是去掉where条件,没有了条件,也就是删除掉表里面的所有记录了; 第二种方法像是重置表,把表中内容全部清除,回到刚建好表的状态&#xff…

jQuery学习笔记(四)

jQuery对表单、表格的操作及更多应用 表单应用 一个表单组成部分: 表单标签、表单域及表单按钮 单行文本框应用获取和失去焦点事件 $(function(){ $(":input").focus(function(){ //获取焦点触发事件 $(this).addClass("focus"); //增加样…

Flask最强攻略 - 跟DragonFire学Flask - 第四篇 Flask 中的模板语言 Jinja2 及 render_template 的深度用法

https://www.cnblogs.com/DragonFire/p/9259999.html 是时候开始写个前端了,Flask中默认的模板语言是Jinja2 现在我们来一步一步的学习一下 Jinja2 捎带手把 render_template 中留下的疑问解决一下 首先我们要在后端定义几个字符串,用于传递到前端 STUDENT {name: Old, age:…

【Jetson Nano学习笔记】1. 系统镜像和ROS的安装

目录安装系统换源安装VNC服务安装ROS初始化rosdep和环境测试平台:Jetson Nano 系统版本:4.6.1 安装系统 在Jetson Download Center下载镜像: 在树莓派资源下载 | 树莓派实验室下载工具 使用SDFormatter格式化内存卡 使用balenaEtcher烧录镜…

我的Android进阶之旅------Android利用Sensor(传感器)实现水平仪功能的小例

这里介绍的水平仪,指的是比较传统的气泡水平仪,在一个透明圆盘内充满液体,液体中留有一个气泡,当一端翘起时,该气泡就会浮向翘起的一端。 利用方向传感器返回的第一个参数,实现了一个指南针小应用。我的And…

【linux命令总结】——后续用到的内容持续补充和更新

比如说:某个文件是go文件,名字叫做 Hello.go 1、通过后台运行某个程序,将结果输出到某个文件, 如果是直接运行go程序:go run Hello.go 后台运行:nohup go run Hello.go & ,然后就会将结果输…

【Jetson Nano学习笔记】2. ORB-SLAM3及ZED 2i驱动安装

目录ZED 2i驱动安装安装驱动自测ROS测试zed2i.launchrostopic listrosnode listdisplay_zed2i.launchzed_rtabmap.launchORB-SLAM3安装OpenCV 3安装Glew安装Pangolin安装boost安装Eigen 3安装OpenGL安装openssl安装ORB-SLAM3建立swap准备编译编译关闭swap平台:Jetso…

给超链接(a标签)加onclick事件

<a onclick"alert(1)">超链接1</a><br> <a href"#" onclick"alert(2)">超链接2</a> <br> <a href"javascript:alert(3)">超链接3</a>

proj1088

滑雪Time Limit: 1000MS Memory Limit: 65536KTotal Submissions: 69608 Accepted: 25669Description Michael喜欢滑雪百这并不奇怪&#xff0c; 因为滑雪的确很刺激。可是为了获得速度&#xff0c;滑的区域必须向下倾斜&#xff0c;而且当你滑到坡底&#xff0c;你不得不再次走…

【Jetson Nano学习笔记】3. ORB-SLAM3运行双目Demo(ZED 2i)

目录修改zed-ros-wrapper的参数双目测试平台&#xff1a;Jetson Nano 系统版本&#xff1a;4.6.1 参考资料&#xff1a; zed-ros-wrapper —— ROS Wiki ZED 相机 && ORB-SLAM2安装环境配置与ROS下的调试 —— 李小铭 又一遍……ORB_SLAM2ZED相机(SDK2.2.1)CUDA9.0ROS…

PyCharm设置自动换行

在使用PyCharm码代码的时候&#xff0c;有些单行的代码比较长&#xff0c;经常需要手动拉动滚动条。 辣么怎么设置自动换行呢&#xff1f;&#xff1f; 敲黑板 在这里给大家介绍两种方式&#xff1a; 1、如果你需要频繁在【自动换行/非自动换行】模式中切换 那就需要设置一个顺…

邮件服务

http://linuxsogood.org/1121.html/comment-page-1 转载于:https://www.cnblogs.com/saolv/p/7440536.html

MySQL数据库和ACID模型

2019独角兽企业重金招聘Python工程师标准>>> ACID模型是一组强调高可靠性的数据库系统设计原则。InnoDB存储引擎坚持ACID原则&#xff0c;确保即使在软件崩溃甚至是硬件故障的情况下&#xff0c;数据也不会损坏。当你需要依赖兼容ACID原则的业务时&#xff0c;你不必…

MFC中SQLite数据库的使用

1打开数据库 BOOL playDlg::openData() { WCHAR a[100]; CString path; path m_exePathL"sentence_making\\FROG.db"; memcpy(a,path,sizeof(a)); int nRet sqlite3_open16((const char *)a,&pSQLite); // 链接到数据库&#xff0c;如果成功&#xff0c;数据…

【Jetson Nano学习笔记】4. python 3编译bridge

目录使用python3编译boostconsole_bridgepython3bridge平台&#xff1a;Jetson Nano 系统版本&#xff1a;4.6.1 参考资料&#xff1a; How to setup ROS with Python 3 Unable to use cv_bridge with ROS Kinetic and Python3 CMake Error &#xff1a;Could not find a pac…

Python作用域

Python是静态作用域&#xff0c;也就是说在Python中&#xff0c;变量的作用域源于它在代码中的位置。与C语言有一些类似&#xff0c;与C语言比起来还有一些需要注意的地方。 现在的Python支持4种作用域&#xff0c;"LEGB" L(local)&#xff1a;局部作用域&#xff1b…

解决flask端口被占用的问题

2019.04.11 实测&#xff1a; 只要停止程序&#xff0c;再运行&#xff0c;就可以了 问题提示&#xff1a;socket.error:[Errno 48] Address already in use 在编辑flask代码时&#xff0c;如果没有关闭flask的程序&#xff0c;默认的5000端口一直被占用。 再次运行的时候&am…