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

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

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

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

  1. pjsip视频通信开发(上层应用)之拨号界面整体界面功能实现

    在前面的几章里面写了显示.键盘.拨号.删除功能,这里我将他们进行组合,形成一个拨号键盘全部功能.首先是布局 <LinearLayout xmlns:android="http://sc ...

  2. 如何在陪玩游戏系统开发中,快速实现音视频通信?

    其实在陪玩游戏系统开发过程中,快速实现音视频通信的方法就是寻找或调用别家的API,毕竟音视频通信涉及到的技术比较繁杂,像音视频采集.解码.处理等环节.而且采用三方的API,不仅能够实现更好的体验效果, ...

  3. 【转】Web实现音频、视频通信

    Google开源实时通信项目WebRTC Google正式开源了WebRTC实时通信项目,希望浏览器厂商能够将该技术内建在浏览器中,从而使Web应用开发人员能够通过HTML标签和JavaScript ...

  4. 搭建一个多对多的音视频通信服务

    多方音视频通信三种架构方案 一.Mesh 方案 即多个终端之间两两进行连接,形成一个网状结构.这种方案是1v1 WebRTC 通信模型的扩展版,任何两个结点都可以看成一个1v1 WebRTC 通信模型 ...

  5. 音视频技术开发周刊 79期

    『音视频技术开发周刊』由LiveVideoStack团队出品,专注在音视频技术领域,纵览相关技术领域的干货和新闻投稿,每周一期.点击『阅读原文』,浏览第79期内容,祝您阅读愉快. 原文 https:/ ...

  6. 基于DSP/BIoS设备驱动模型的视频驱动程序开发

    作者:天津科技大学 电子信息与自动化学院 严新忠,刘 喆 通过给外部设备编写驱动程序是一种有效的控制外设的方法.随着DSP的应用越来越广泛,DSP实时系统的日趋复杂及新技术的出现,DSP处理器所连接的 ...

  7. 全功能音视频互动开发平台

    全功能音视频互动开发平台 云智真音视频解决方案,即云智真音视频互动开发平台(云智真音视频SDK开发包)通过封装音视频编解码.流媒体处理以及P2P等专业复杂技术,为上层应用提供简单的API控制接口,实现 ...

  8. 实时通讯音视频互动开发需求汇总

    实时通讯音视频互动开发需求汇总 实时通讯音视频互动开发就是通过开发一套跨平台的即时通讯音视频同步解决方案,基于先进的H.264视频编码标准.AAC音频编码标准与P2P技术,整合音视频编码.多媒体通讯开 ...

  9. 如何零门槛搭建实时音视频通信平台

    迅达云视频云产品全面更新,为用户带来全新的一站式服务体验. 迅达云全面拥抱下一代互联网音视频通信开放标准 WebRTC,依托团队多年行业经验积累,结合迅达云实时音视频通信 SDK,匠心打造了一站式实时 ...

最新文章

  1. Python | 安装Jupyter Notebook及其目录的更改 jupyter问题
  2. C++中的cin、cin.getline()、getline()函数比较
  3. 深入理解Android Paging分页加载库
  4. Tomcat - Tomcat 8.5.55 启动过程源码分析阶段一_init实例化Bootstrap
  5. mac 下配置连接Linux服务器方法,上传下载文件操作
  6. 交叉验证 cross validation 与 K-fold Cross Validation K折叠验证
  7. thymeleaf的属性优先级
  8. 用Rainbond快速实现企业云原生
  9. MySQL 常用基础命令
  10. linux打包解压工具,linux下的解压,打包工具
  11. python对数据进行分组怎么实现_Python--DataFrame分组-GroupBy
  12. 学完计算机控制系统的感受,管理信息系统学习心得体会(精选5篇)
  13. win7用友u8安装教程_win7系统安装用友u8的方法 win7用友u8安装教程
  14. 数据分析模型篇—麦肯锡矩阵(GE矩阵)
  15. 江涛带你玩STM-CubeMx之OLED使用3线SPI和4线SPI驱动详解
  16. python开发积累
  17. iOS 9:四、设置信任
  18. Filter过滤器的理解(一)
  19. 论文结论与摘要的区别
  20. Mac OS 使用命令(scp/sftp)将本地文件上传到远程 Linux 服务器主机或者从远程主机下载文件到本地主机

热门文章

  1. java 基本类型 线程安全_java的基本类型和i++线程安全性的深入解析
  2. gorm preload 搜索_LeetCode刷题笔记|95:不同的二叉搜索树 II
  3. 操作系统上机题目(多进程1)
  4. cacheinterceptor第二次访问没被调用_访问者设计模式在OSG中的应用
  5. CPU使用率的查看以及性能分析(perf top/record/report)
  6. ruby hash方法_Ruby中带有示例的Hash.select方法
  7. Java BigInteger类| modInverse()方法与示例
  8. c ++ stl_通过分配另一个列表的所有元素来创建列表| C ++ STL
  9. 劈尖等厚干涉条纹matlab,劈尖等厚干涉实验中,k=0级的干涉条纹是条纹,与k级暗条纹对应的空气薄膜的厚度为...
  10. python接口和抽象类的区别_接口和抽象类有什么区别?