2011-03-28 108 views
16

有沒有辦法判斷軟鍵盤是否顯示在活動中?有沒有辦法判斷是否顯示軟鍵盤?

我試圖

InputMethodManager manager = (InputMethodManager) 
getSystemService(getApplicationContext().INPUT_METHOD_SERVICE); 
manager.isActive(v) 

isActive收益僅在第一次鍵盤顯示前假的,但如果出現KB,然後開除,isActive返回true也。

那麼有沒有其他方法來檢查這個問題。

感謝

回答

12

根據這一POST

如果顯示或不軟鍵盤無法檢測,但可以間接地知道,軟鍵盤是知道你的活動View調整大小顯示。

想象一下,您有一個ListView並在底部EditText,當用戶單擊EditText後顯示一個軟鍵盤時,您想要到列表的底部。

您需要實現ListView的子類,然後將其用於您的ListActivityActivityView

public class ThreadView extends ListView { 

    public ThreadView(Context context, AttributeSet attributeSet) { 
     super(context, attributeSet); 
    } 

    @Override 
    protected void onSizeChanged(int xNew, int yNew, int xOld, int yOld) { 
     super.onSizeChanged(xNew, yNew, xOld, yOld); 

     if (yOld > yNew) { 
      setSelection(((ListAdapter) getAdapter()).getCount() - 1); 
     } 
    } 
} 

希望這有助於

PS。 「檢查配置更改」僅適用於手持鍵盤。

+0

我相信這是這個問題的唯一解決方案 – 2011-05-01 12:08:17

+1

這是要走的路,至少在Android 2.2和迄今爲止。真正的痛苦是沒有用於檢測軟鍵盤的API(並且就此而言,掌握了它的幻燈片動畫)。感謝你的回答! – 2011-09-01 01:43:39

+0

爲什麼我只看到這一點?!花了很多時間嘗試使用onMeasure,onLayoutChange等等,而這是唯一可行的解​​決方案。最簡單的!多謝多啦A夢,哦,我的意思是@DiveInto。 :p – KarenAnne 2014-03-10 07:08:54

-2

請檢查配置更改爲您的活動

這就爲您AndroidManifest.xml中

,這對您的活動http://developer.android.com/reference/android/app/Activity.html#onConfigurationChanged(android.content.res.Configuration

你會需要@Override公共方法onConfigurationChanged(android.content.res.Configuration)的活動,以便能夠處理,例如,這些值:
hardKeyboardHidden
鍵盤
keyboardHidden

對於所有可能的值檢查http://developer.android.com/reference/android/content/res/Configuration.html

你會看到有這樣的事情:

HARDKEYBOARDHIDDEN_NO 
HARDKEYBOARDHIDDEN_UNDEFINED  
HARDKEYBOARDHIDDEN_YES 
KEYBOARDHIDDEN_NO 
KEYBOARDHIDDEN_UNDEFINED  
KEYBOARDHIDDEN_YES 
KEYBOARD_12KEY 
KEYBOARD_NOKEYS 
KEYBOARD_QWERTY 
KEYBOARD_UNDEFINED 

也有,你將能夠讀取這樣的事情:

public int hardKeyboardHidden // A flag indicating whether the hard keyboard 
           // has been hidden. 
public int keyboard The kind of keyboard attached to the device. 
public int keyboardHidden A flag indicating whether any keyboard is available. 

UPDATE:

下面是具體例如什麼I'm談到:

http://developer.android.com/guide/topics/resources/runtime-changes.html

 
@Override 
public void onConfigurationChanged(Configuration newConfig) { 
    super.onConfigurationChanged(newConfig); 

    // Checks the orientation of the screen 
    if (newConfig.orientation == Configuration.ORIENTATION_LANDSCAPE) { 
     Toast.makeText(this, "landscape", Toast.LENGTH_SHORT).show(); 
    } else if (newConfig.orientation == Configuration.ORIENTATION_PORTRAIT) { 
     Toast.makeText(this, "portrait", Toast.LENGTH_SHORT).show(); 
    } 
    // Checks whether a hardware keyboard is available 
    if (newConfig.hardKeyboardHidden == Configuration.HARDKEYBOARDHIDDEN_NO) { 
     Toast.makeText(this, "keyboard visible", Toast.LENGTH_SHORT).show(); 
    } else if (newConfig.hardKeyboardHidden == 
      Configuration.HARDKEYBOARDHIDDEN_YES) { 
     Toast.makeText(this, "keyboard hidden", Toast.LENGTH_SHORT).show(); 
    } 
} 
+1

感謝響應,但沒有捕獲任何變化時,KB出現或消失 – 2011-03-28 18:00:49

+0

嗨,你應該尋找和例子來看看,當你的清單,你設置的android:configChanges =「keyboardHidden」這將觸發您調用的任何Activity中的onConfigurationChanged方法。如果您重寫該方法,則可以爲您的活動傳遞新值,或者可以獲取當前值。我的意思是,使用這個,你可以讓你的應用程序監聽事件,比如鍵盤可見性的變化,並在你的Activity中處理它們。 – yeradis 2011-03-29 07:04:38

+0

我剛剛更新了回覆,添加了一個來自http://developer.android.com/guide/topics/resources/runtime-changes.html的示例,您將看到更好的信息「處理配置更改自己」 – yeradis 2011-03-29 07:10:23

3

使用dumpsys shell命令,可以檢測軟件鍵盤的狀態和座標。

因爲dumpsys需要permission.android.DUMP這是一個系統應用程序權限,所以您有兩個選擇:1.使用根設備授予此權限。 2.按照我的other answer中所述,使用adb覆蓋問題。

現在,運行以下命令:dumpsys window InputMethod | grep "mHasSurface"以獲取您正在查找的數據。

-1

這是我的想法。它未經測試。

@Override 
    public void onConfigurationChanged(Configuration newConfig) { 
     super.onConfigurationChanged(newConfig); 

     // Checks whether a keyboard is available which is not hard keyboard 
     if ((newConfig.keyboardHidden == Configuration.HARDKEYBOARDHIDDEN_NO)&&(newConfig.keyboardHidden != Configuration.HARDKEYBOARDHIDDEN_NO)) { 
      Toast.makeText(this, "soft keyboard visible", Toast.LENGTH_SHORT).show(); 
     } else if (newConfig.keyboardHidden == Configuration.KEYBOARDHIDDEN_YES) { 
     Toast.makeText(this, "soft keyboard hidden", Toast.LENGTH_SHORT).show(); 
     } 
    } 
+0

如果您有新問題,請點擊[問問題](https://stackoverflow.com/questions/ask)按鈕。如果有助於提供上下文,請包含此問題的鏈接。 - [來自評論](/ review/low-quality-posts/17931905) – 2017-11-13 18:00:15

相關問題