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.pswp.cn/news/537764.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/537764.shtml
英文地址,請注明出處:http://en.pswp.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;如第四季度該文件名“【預評分】…