Android点击返回键销毁自己,Activity界面销毁 软键盘未收回

在项目开发过程中,界面包含EditText输入框时,输入内容时软键盘弹起。但是此时我们调用界面中自定义的返回按钮执行.finish()方法销毁Activity后发现软键盘并没有跟随关闭收回,参考了网上各种方法后,试验总结出自己项目中可用的方案。

注意:此篇记录的是调用.finish()返回时软键盘未回收问题,而非手机本身的back键(手机本身的back键点击是会先收回软键盘,在销毁Activity)。

1、在AndroidManifest.java清单文件的标签下加入stateUnspecified。

使用环境是在ActivityB开启ActivityC,ActivityC中包含EditText,点击输入框获取焦点使软键盘弹出,然后调用自定义返回按钮执行.finish()方法,当ActivityC销毁后返回到ActivityB界面时,软键盘未回收问题,此时可以在AndroidManifest.java的ActivityB的标签下添加android:windowSoftInputMode="stateUnspecified"。

注:此方案在我的项目中使用无效,在此记录。

B界面设置android:windowSoftInputMode

键盘是否自动回收

stateUnspecified

stateUnchanged

stateHidden

stateAlwaysHidden

stateVisible

stateAlwaysVisible

stateHidden

不指定

2、在Activity的onDestory方法中监测软键盘是否存在,存在则回收。

备注:此方法不稳定,在Activity中不包含EditText时会莫名其妙的弹起软键盘。

@Override

protected void onDestroy() {

super.onDestroy();

InputMethodManager imm = (InputMethodManager) getSystemService(INPUT_METHOD_SERVICE);

if (imm != null) {

imm.hideSoftInputFromWindow(getWindow().getDecorView().getWindowToken(), 0);

}

}

3、在.finish()前先收回软键盘

在每个Activity中调用.finish()前手动调用收回软键盘方法,此方案测试过几个页面,可以使用。在使用时最好判断软键盘是否有显示,若显示则回收,否则忽略。

@OnClick({R.id.iv_back)

void iv_depart_back(View view){

hideInput()

finish();

}

protected void hideInput() {

super.onDestroy();

InputMethodManager imm = (InputMethodManager) getSystemService(INPUT_METHOD_SERVICE);

if (imm != null) {

imm.hideSoftInputFromWindow(getWindow().getDecorView().getWindowToken(), 0);

}

}

4、自定义View,覆写dispatchKeyEventPreIme(KeyEvent event)方法

此方案未测试,针对现有的项目不好再去改动之前已经定义好的View内容,所以是新开启项目的可以尝试使用。

import android.app.Activity;

import android.content.Context;

import android.util.AttributeSet;

import android.view.KeyEvent;

import android.view.inputmethod.InputMethodManager;

import android.widget.RelativeLayout;

/**

* Finishes the containing activity on BACK, even if input method is showing.

*/

public class SearchActivityView extends RelativeLayout {

public SearchActivityView(Context context) {

super(context);

}

public SearchActivityView(Context context, AttributeSet attrs) {

super(context, attrs);

}

public SearchActivityView(Context context, AttributeSet attrs, int defStyle) {

super(context, attrs, defStyle);

}

private Activity getActivity() {

Context context = getContext();

if (context instanceof Activity) {

return (Activity) context;

} else {

return null;

}

}

/**

* Hides the input method.

*/

protected void hideInputMethod() {

InputMethodManager imm = (InputMethodManager)getContext().getSystemService(Context.INPUT_METHOD_SERVICE);

if (imm != null) {

imm.hideSoftInputFromWindow(getWindowToken(), 0);

}

}

/**

* Overrides the handling of the back key to dismiss the activity.

*/

@Override

public boolean dispatchKeyEventPreIme(KeyEvent event) {

Activity activity = getActivity();

if (activity != null && event.getKeyCode() == KeyEvent.KEYCODE_BACK) {

KeyEvent.DispatcherState state = getKeyDispatcherState();

if (state != null) {

if (event.getAction() == KeyEvent.ACTION_DOWN && event.getRepeatCount() == 0) {

state.startTracking(event, this);

return true;

} else if (event.getAction() == KeyEvent.ACTION_UP && !event.isCanceled() && state.isTracking(event)) {

hideInputMethod();

activity.onBackPressed();

return true;

}

}

}

return super.dispatchKeyEventPreIme(event);

}

}

5、设置自定义的返回按钮响应系统的back键,在点击事件中执行

此方式需要在线程中执行,未进行测试。

new Thread () {

public void run () {

try {

Instrumentation inst= new Instrumentation();

inst.sendKeyDownUpSync(KeyEvent. KEYCODE_BACK);

} catch(Exception e) {

e.printStackTrace();

}

}

}.start();

6、最终解决方案(方案3改良版本)

方案3中的方式可以用,但是有弊端,需要每个Activity中单独添加,如果之前在Base基类中定义过统一的关闭方式修改还是比较方便的。但是如果没有,也没关系。我们可以在Base基类中覆写finisi()方法,来关闭软键盘。

@Override

public void finish() {

super.finish();

hideKeyBoard();

}

/**

* 关闭软键盘

*/

public void hideKeyBoard() {

InputMethodManager imm = (InputMethodManager)getSystemService(Context.INPUT_METHOD_SERVICE);

if(imm.isActive()&&getCurrentFocus()!=null){

if (getCurrentFocus().getWindowToken()!=null) {

imm.hideSoftInputFromWindow(getCurrentFocus().getWindowToken(), InputMethodManager.HIDE_NOT_ALWAYS);

}

}

}

总结:上述方案1、2、3都测试过,在不同机型上使用效果都有差异,最后的方案6在现有的测试机上测试都可以正常显示和关闭,在此进行记录。

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

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

相关文章

2、Collections操作(自定义类)的各种实现

2019独角兽企业重金招聘Python工程师标准>>> 1、排序(sort) 要想实现排序,必须实现compare方法,这样Collection才知道是怎样的排序规则。普通的数据类型,比如:int 、String、long等都已经实现了Comparable接口&#xf…

Mysql sql语句积累

分组排序 #alter table zxfw_offline_qa add zx_number varchar(50) COMMENT 咨询编号,提问日期提问顺序 AFTER id;/* select (i : case when pre_consult_timeconsult_time then i 1 else 1 end ) rownum, qa.*,(pre_consult_time:consult_time) from zxfw_…

中缀表达式转换成后缀表达式(只适用于加减乘除运算)

1 #include <iostream>2 #include <stack>3 #include <cctype>4 5 using namespace std;6 7 //获取符号的优先级8 int getPriority(char c)9 { 10 int priority -1; 11 switch (c) { 12 case : 13 priority 1; 14 break; 15 …

android多接口请求参数,okhttp3 使用json参数post方式请求接口数据(android)

1. 谷歌自带的json不支持像map一样直接put字符串进去&#xff0c;所以先导入阿里的json包2. 创建json对象&#xff0c;并且放入所要请求的参数 //登录 private void loginRequest() { String url Contents.url"login"; JSONObject json new JSONObject(); json.put…

由浅入深,一文掌握NGINX知识文集

&#x1f3c6;作者简介&#xff0c;普修罗双战士&#xff0c;一直追求不断学习和成长&#xff0c;在技术的道路上持续探索和实践。 &#x1f3c6;多年互联网行业从业经验&#xff0c;历任核心研发工程师&#xff0c;项目技术负责人。 &#x1f389;欢迎 &#x1f44d;点赞✍评论…

MySQL not in查询不出数据(MySQL not in 无效)

今天使用 MySQL 的 not in 进行查询的时候&#xff0c;发现结果里面并没有返回任何数据。SQL 语句没有任何问题&#xff0c;但是结果集却是空&#xff0c;实在无法理解。纠结了半天&#xff0c;最后使用 left join&#xff0c;两表关联&#xff0c;找到了目标数据。但是这样的话…

Python语法特点如注释规则、代码缩进、编码规范等

在Python中&#xff0c;通常包括3种类型的注释&#xff0c;分别是单行注释、多行注释和中文编码声明注释。单行注释在Python中&#xff0c;使用“#”作为单行注释的符号。从符号“#”开始直到换行为止&#xff0c;“#”后面所有的内容都作为注释的内容&#xff0c;并被Python编…

修改android.jar教程,Android修改jar包文件

1、Android studio中新建java文件&#xff0c;取和将要修改的文件相同的文件名&#xff0c;把class文件中代码复制过去&#xff0c;修改需要改动的代码2、新建txt文件&#xff0c;将新建的Java文件按照依赖关系将路经添加到新建的txt文件中&#xff0c;被依赖的放在最前面(ps:此…

安卓市场上架总结

安卓上架截图&#xff08;不要带手机外观&#xff09; 注意&#xff1a;截图不能有二维码小米 至少3张&#xff0c;480*854像素&#xff0c;JPG、PNG格式。腾讯应用宝 请上传2-5张截图&#xff08;尺寸保持一致&#xff09;&#xff0c;单张图片不超过1M。截图不能小于320*480像…

android 左右分栏联动布局,Layout 布局(24 分栏)

基础布局使用单一分栏创建基础的栅格布局(:span“0~24”).el-row {margin-bottom: 20px;&:last-child {margin-bottom: 0;}}.el-col {border-radius: 4px;}.bg-purple-dark {background: #99a9bf;}.bg-purple {background: #d3dce6;}.bg-purple-light {background: #e5e9f2…

洛谷P4238 【模板】多项式求逆(NTT)

传送门 学习了一下大佬的->这里 已知多项式$A(x)$&#xff0c;若存在$A(x)B(x)\equiv 1\pmod{x^n}$ 则称$B(x)$为$A(x)$在模$x^n$下的逆元&#xff0c;记做$A^{-1}(x)$ 具体的来说的话&#xff0c;就是两个多项式$A,B$相乘模$x^n$之后&#xff0c;所有次数大于等于$n$的项都…

win10安装TortoiseGit

TortoiseGit 是Git的可视化工具。所以前提是已经安装了Git&#xff0c;安装很简单一路next。 下载地址&#xff0c;百度搜“TortoiseGit”&#xff0c;一般是第一个。 目前地址是&#xff1a;https://tortoisegit.org/download/ 如果打不开&#xff0c;可以进入腾讯软件中心…

CF1045G AI robots(动态开点线段树)

题意 火星上有$N$个机器人排成一行&#xff0c;第$i$个机器人的位置为$x_{i}$&#xff0c;视野为$r_{i}$&#xff0c;智商为$q_{i}$。我们认为第$i$个机器人可以看到的位置是$[x_{i}-r_{i},x_{i}r_{i}]$。如果一对机器人相互可以看到&#xff0c;且它们的智商$q_{i}$的差距不大…

android qq登录 获取用户信息吗,免登录 只需要一个QQ号就能获取QQ头像和QQ昵称 获取QQ用户信息API...

[PHP] 纯文本查看 复制代码<?php // headerheader("Content-Type:application/json");error_reporting(E_ALL^E_NOTICE^E_WARNING);// 获取QQ号$qq $_GET["qq"];// 过滤if (trim(empty($qq))) {echo json_encode(array(status > error,msg > 未…

Python3.8安装 jupyter报错 NotImplementedError

报错如下&#xff1a; 原因&#xff1a; 是由于 python3.8 asyncio 在 windows 上默认使用 ProactorEventLoop 造成的&#xff0c;而不是之前的 SelectorEventLoop。jupyter 依赖 tornado&#xff0c;而 tornado 在 window 上需要使用 SelectorEventLoop&#xff0c;所以产生这…

浅析Nginx 正向代理与反向代理

1、正向代理和反向代理的概念 无论是正向代理&#xff0c;还是反向代理&#xff0c;说到底&#xff0c;就是代理模式的衍生版本罢了。我们都学习过代理设计模式&#xff0c;都知道代理模式中有代理角色和被代理角色&#xff0c;为什么这么说&#xff0c;因为这两个角色对于我们…

pycharm 安装 jupyter

jupyter可以像笔记一样&#xff0c;在学习和整理思路时很好。 使用的python是3.7.5版本 windows安装步骤&#xff1a; cmd 再修改下pip的源&#xff0c;选择国内&#xff0c;这样快。 国内pip源: 阿里云 https://mirrors.aliyun.com/pypi/simple/ 广东 豆瓣https://pypi…

android5.1 sdk version,java - Android SDK version 23.6 - Stack Overflow

Does it support java 8 yet?Eclipse is displaying this as a problem, surely it does support 8 by now? In the release notes for revision 23.6 it says java 7 or higher, does this mean java 8 is included or? Wish theyd be more specific about such details. A…

或成为性能宠儿,荣耀8x Max 骁龙660版首销在即

今天已经是十一假期的最后一天了&#xff0c;假期马上就要结束了&#xff0c;虽然这有点让人遗憾&#xff0c;但是接下来的好消息让很多人的心情好了不少&#xff0c;那就是10月8日荣耀8x Max骁龙660版本就要在全平台开售了&#xff0c;这恐怕是节后最开心的事情了。此前&#…

绩效考核编写说明

第一步&#xff1a; 请大家从群文件下载自己的考核表&#xff0c;该表格是季度初填写的&#xff0c;与实际进度安排有偏差&#xff0c;需要调整&#xff08;见第三步&#xff09; 第二步&#xff1a; 请大家从群文件下载部门考核表&#xff0c;如第四季度该文件名“【预评分】…