我遇到了一些問題,試圖檢測軟件鍵盤是否可見。當鍵盤可見或隱藏不工作時檢測
我尋找一個解決方案(包括SO),但沒有運氣。 什麼奇怪的是,我這樣做是在相同的應用程序通過檢查窗口的大小發生了變化,就像這樣:
final View activityRootView = findViewById(R.id.tlFull);
//tlFull is the activity table layout
activityRootView.getViewTreeObserver().addOnGlobalLayoutListener(
new OnGlobalLayoutListener()
{
public void onGlobalLayout()
{
int heightDiff = activityRootView.getRootView()
.getHeight() - activityRootView.getHeight();
if (heightDiff > 100)
{
//did some stuff here
}
else
{
//and here
}
}
});
,並通過添加 的android:manifest文件windowSoftInputMode =「adjustResize」。
現在我正在嘗試在登錄活動上做同樣的事情,但它由於某種原因而接縫,因爲heightDiff總是38,所以這不再起作用。對於使用相同方法的SO上找到的每個方法也是如此。
我也試過這個,但它總是返回true。
final View activityRootView = findViewById(R.id.tlFull);
activityRootView.getViewTreeObserver()
.addOnGlobalLayoutListener(new OnGlobalLayoutListener()
{
@Override
public void onGlobalLayout()
{
if (getResources().getConfiguration()
.keyboardHidden == Configuration.KEYBOARDHIDDEN_NO)
{}
else
{}
}
});
而且,由於我沒有使用片段,我不能用這個:
InputMethodManager imm = (InputMethodManager) getActivity()
.getSystemService(Context.INPUT_METHOD_SERVICE);
if (imm.isAcceptingText())
{}
else
{}
我也嘗試了不同的方法。 我做我想做的etPass(觸發鍵盤編輯文本)的onClick方法做:
etPass.setOnClickListener(new OnClickListener()
{
public void onClick(View viewIn)
{
ivImageView.setVisibility(View.GONE);
}
});
不幸的是,即使鍵盤顯示出來的圖像視圖並不總是在第一次輕觸消失,所以我必須再次點擊。
第二個問題是我試圖再次在onBackPressed()方法中顯示iv。這有效,但不是它應該如何。
當我第一次點擊後退按鈕時,鍵盤消失了,但我必須再次點擊以使圖像可見。 (我試過在這裏提供的解決方案,但它沒有工作:EditText with soft keyboard and "Back" button)
此外,這可以防止關閉onBackPressed()應用程序。
關於如何解決這個問題以及爲什麼差異總是相同的任何想法? 我找不到一個更好的解決方案,現在我擔心未來可能會出現同樣的問題(儘管它在接下來的測試中能夠正常工作)
試試這個辦法,工作可靠我:http://stackoverflow.com/questions/4745988/how-do-i-detect-if-software-keyboard- is-visible-on-android-device/31090451#31090451 –