歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
您现在的位置: Linux教程網 >> UnixLinux >  >> Linux編程 >> Linux編程

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時再顯示軟鍵盤。這些只是我的一些個人見解,如有疑問或更好方案大家可以一起討論。

Copyright © Linux教程網 All Rights Reserved