1. 程式人生 > >android EditText軟鍵盤顯示隱藏以及"監聽"

android EditText軟鍵盤顯示隱藏以及"監聽"

一、寫此文章的起因

本人在做類似於微信、易信等這樣的聊天軟體時,遇到了一個問題。聊天介面最下面一般類似於如圖1這樣(這裡只是顯示了最下面部分,可以參考微信等),有輸入文字的EditText和表情按鈕等。

1、點選表情會在這下面顯示錶情選擇,如圖2,如果之前點選輸入框彈出了軟鍵盤,那麼還需要隱藏軟鍵盤;

2、點選輸入框,彈出軟鍵盤,如果之前顯示了表情選擇,則還需要隱藏表情選擇

這裡我們第一想到的就是需要監聽軟鍵盤的顯示和隱藏,我也是這樣想的,到網上一查,都是重寫根佈局,比如LinearLayout,RelativeLayout這些,然後重寫OnLayout方法,這種主要是監聽根佈局高度的變化,來判斷軟鍵盤的顯示和隱藏,我這樣做了,但是像華為p6這樣的手機,它有一個虛擬的home,back鍵,可以通過向上向下滑動來顯示和隱藏,我在上面測試了一下,它的虛擬鍵和輸入法都判斷到了,我無法知道到底是哪個,所以我就捨棄了這個方法。在仔細參考了微信和易信時,發現了這種方法,簡單易用。

    

圖1圖2

二、解決方案

我針對第一點中提到了兩點需要實現的功能來講解

1、點選表情隱藏輸入法,我們只需要強制隱藏輸入法就可以了,這個不需要過多講解

//強行隱藏輸入法
inputMethodManager.hideSoftInputFromWindow(mEditTextContent.getWindowToken(), 0);
2、點選輸入框,輸入法彈出來後,需要隱藏表情選擇,其實這裡不需要監聽軟鍵盤的顯示,也不好監聽。我仔細觀察了易信和微信的輸入框,感覺很靈敏,觸控上去就彈出了輸入法,而我的輸入框就沒那麼靈敏,所以就仔細考慮了一下,直接設定輸入框的Touch事件,主動強制彈出輸入法,這時就可以隱藏表情選擇了.
mEditTextContent.setOnTouchListener(new View.OnTouchListener()
		{
			
			@Override
			public boolean onTouch(View v, MotionEvent event)
			{
				//強制顯示軟鍵盤
				boolean bool = inputMethodManager.showSoftInput(v,InputMethodManager.SHOW_FORCED);
				if(bool){
					chatAdd.setVisibility(View.GONE);
					layoutChatFace.setVisibility(View.GONE);
				}
				return false;
			}
		});

如果這裡覺得太靈敏,也可以在Touch事件中,但Up時再顯示軟鍵盤。這些只是我的一些個人見解,如有疑問或更好方案大家可以一起討論。