DownEditTextView【自定义Edittext对Android 软键盘向下的监听】
版权声明:本文为HaiyuKing原创文章,转载请注明出处!
前言
记录自定义EditText控件实现监听软键盘隐藏事件的功能。基本上和参考资料相同。
效果图

代码分析
自定义EditText子类,然后重写onKeyPreIme方法
@Override
public boolean onKeyPreIme(int keyCode, KeyEvent event) {
if (keyCode == KeyEvent.KEYCODE_BACK && event.getAction() == 1) {
Log.i("DownEditTextView", "键盘向下 ");
super.onKeyPreIme(keyCode, event);
if(onKeyBoardHideListener != null){
onKeyBoardHideListener.onKeyHide(keyCode, event);//回调
}
return false;
}
return super.onKeyPreIme(keyCode, event);
}
使用步骤
一、项目组织结构图


注意事项:
1、 导入类文件后需要change包名以及重新import R文件路径
2、 Values目录下的文件(strings.xml、dimens.xml、colors.xml等),如果项目中存在,则复制里面的内容,不要整个覆盖
二、导入步骤
将DownEditTextView复制到项目中
package com.why.project.androidcnblogsdemo.views.customedittext; import android.annotation.SuppressLint;
import android.content.Context;
import android.util.AttributeSet;
import android.util.Log;
import android.view.KeyEvent;
import android.widget.EditText; /**
* Created by HaiyuKing
* Used 对Android 软键盘向下的监听:https://blog.csdn.net/yxhuang2008/article/details/53822072
* Android软键盘弹出和收回监听:https://blog.csdn.net/wangkai1101/article/details/79066046
*/ @SuppressLint("AppCompatCustomView")
public class DownEditTextView extends EditText {
public DownEditTextView(Context context) {
super(context);
} public DownEditTextView(Context context, AttributeSet attrs) {
super(context, attrs);
} public DownEditTextView(Context context, AttributeSet attrs, int defStyleAttr) {
super(context, attrs, defStyleAttr);
} @Override
public boolean onKeyPreIme(int keyCode, KeyEvent event) {
if (keyCode == KeyEvent.KEYCODE_BACK && event.getAction() == 1) {
Log.i("DownEditTextView", "键盘向下 ");
super.onKeyPreIme(keyCode, event);
if(onKeyBoardHideListener != null){
onKeyBoardHideListener.onKeyHide(keyCode, event);//回调
}
return false;
}
return super.onKeyPreIme(keyCode, event);
} /**
*键盘监听接口
*/
public OnKeyBoardHideListener onKeyBoardHideListener;
public void setOnKeyBoardHideListener(OnKeyBoardHideListener onKeyBoardHideListener) {
this.onKeyBoardHideListener = onKeyBoardHideListener;
} public interface OnKeyBoardHideListener{
void onKeyHide(int keyCode, KeyEvent event);
}
}
输入框背景图片资源input_box_send.9.png

三、使用方法
在布局文件中引用这个自定义控件【注意,实际项目中需要更改DownEditTextView的完整路径】
<?xml version="1.0" encoding="utf-8"?>
<!-- 自定义EditText的演示(监听软键盘隐藏) -->
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="match_parent"> <com.why.project.androidcnblogsdemo.views.customedittext.DownEditTextView
android:id="@+id/edt_down"
android:layout_width="match_parent"
android:layout_height="48dp"
android:inputType="text"
android:hint="演示监听软键盘隐藏功能"
android:lines="1"
android:background="@drawable/input_box_send"
android:layout_margin="8dp"
/> </LinearLayout>
Activity中使用
package com.why.project.androidcnblogsdemo.activity; import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.view.KeyEvent;
import android.widget.Toast; import com.why.project.androidcnblogsdemo.R;
import com.why.project.androidcnblogsdemo.views.customedittext.DownEditTextView; /**
* Created by HaiyuKing
* Used 自定义EditText的演示(监听软键盘隐藏)
*/ public class DownEditTextActivity extends AppCompatActivity {
private DownEditTextView mDownEditTextView; @Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_downedittext); initViews();
initEvents();
} private void initViews() {
mDownEditTextView = (DownEditTextView) findViewById(R.id.edt_down);
} private void initEvents() {
mDownEditTextView.setOnKeyBoardHideListener(new DownEditTextView.OnKeyBoardHideListener() {
@Override
public void onKeyHide(int keyCode, KeyEvent event) {
Toast.makeText(DownEditTextActivity.this,"软键盘隐藏了",Toast.LENGTH_SHORT).show();
}
});
}
}
混淆配置
无
参考资料
项目demo下载地址
上面已提供相关代码。
DownEditTextView【自定义Edittext对Android 软键盘向下的监听】的更多相关文章
- Android EditText软键盘显示隐藏以及“监听”
一.写此文章的起因 本人在做类似于微信.易信等这样的聊天软件时,遇到了一个问题.聊天界面最下面一般类似于如图1这样(这里只是显示了最下面部分,可以参考微信等),有输入文字的EditText和表情按钮等 ...
- android设置软键盘搜索键以及监听搜索键点击时发生两次事件的问题解决
在输入框中加入android:imeOptions="actionSearch",调用软键盘时,回车键就会显示搜索二字. 我想在点击搜索时,跳转到下一个页面,但是调用setOnKe ...
- Android 设置软键盘搜索键以及监听搜索键点击事件
如图所示,有时候为了布局美观,在搜索时没有搜索按钮,而是调用软件盘上的按钮.调用的实现只需要在XML在输入框中加入android:imeOptions="actionSearch" ...
- Android 自定义EditText实现粘贴,复制,剪切的监听
package com.dwtedx.qq.view; import android.annotation.SuppressLint; import android.content.Context; ...
- edittext禁止android软键盘弹出
1. EditText ed=(EditText) findViewById(R.id.test); ed.clearFocus(); 2. 在AndroidMainfest.xml中选择哪个acti ...
- Android WebView 向上向下滑动监听
在手势的 public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX, float velocityY) {}代码 ...
- Android之Android软键盘的隐藏显示研究
转自:http://blog.csdn.net/lilu_leo/article/details/6587578 看了很多这类型的文章,这篇文章最有价值,解决了我的烦恼,必须转. Android是一个 ...
- Android 软键盘监听事件
Android软键盘的隐藏显示研究 Android是一个针对触摸屏专门设计的操作系统,当点击编辑框,系统自动为用户弹出软键盘,以便用户进行输入. 那么,弹出软键盘后必然会造成原有布局高度的减少 ...
- 关于android软键盘enter键的替换与事件监听
android软键盘事件监听enter键 软件盘的界面替换只有一个属性android:imeOptions,这个属性的可以取的值有 normal,actionUnspecified,actionNo ...
随机推荐
- js实现定时器,时间倒计时为0后停止
<script type="text/javascript"> var orign_time = 1496706400; var leftTime = Date.par ...
- js 对XML文件的保存与读取
一.保存(在前端用js创建xml格式) function exportToXml(jsonStr){ var obj = eval('('+ jsonStr + ')'); var xmlDoc = ...
- Hadoop-Yarn-框架原理及运作机制
一.YARN基本架构 YARN是Hadoop 2.0中的资源管理系统,它的基本设计思想是将MRv1中的JobTracker拆分成了两个独立的服务:一个全局的资源管理器ResourceManager和每 ...
- linux系统开机流程详解
今天,我们主要来谈谈计算机系统的启动流程 1.BIOS启动 BIOS是写入到主板上的一个韧体(韧体就是写入到硬件上的一个软件程序).开机的时候,BIOS是计算机系统会主动执行的第一个程序.BIOS主要 ...
- JS入门熟知
JS是面向对象的语言 封装 继承 多态 聚集(对象中具有引用其他对象的能力) JS使用中绝大多数情况不需要进行面向对象的设计,很多情况是使用已经设计好,准备好的对象,基于对象的语言. JS的使用(引入 ...
- 微信小程序函数调用监控
微信小程序之无埋点函数调用监控 有时候,面对一个bug,左思右想就是无法理解为什么. 我就有过这样的经历,耗时整个一个晚上,后来还是放弃了.不得不在所有可能的点都加上日志,部署等待再次报错,真的很让人 ...
- 【转】js 好的程序设计,应该什么时候使用 try catch 呢?
比如在检测浏览器是否支持某些功能的时候 if (!xx) { console.error('此浏览器不支持 xx 功能') } 还是 try { xx; } catch(e) { throw new ...
- 以Kafka Connect作为实时数据集成平台的基础架构有什么优势?
Kafka Connect是一种用于在Kafka和其他系统之间可扩展的.可靠的流式传输数据的工具,可以更快捷和简单地将大量数据集合移入和移出Kafka的连接器.Kafka Connect为DataPi ...
- 能否使用require('.json')的方式加载大量JSON文件?
Node.js中推崇非阻塞I/O,但是require一个模块时却是同步调用的,这会带来性能上的开销,但并不是每次require都很耗时,因为在require成功之后会缓存起来,在此加载时直接从缓存读取 ...
- PAT1065: A+B and C (64bit)
1065. A+B and C (64bit) (20) 时间限制 100 ms 内存限制 65536 kB 代码长度限制 16000 B 判题程序 Standard 作者 HOU, Qiming G ...