[英]Getting notified when virtual keyboard shown / dismissed for an EditText?
我想在顯示/解除虛擬鍵盤時收到通知。 這似乎不可能,除了使用一些布局調整大小的偵聽器技巧:
我的活動只有一個EditText。 我可以讓它沒有專注於活動啟動,然后添加一個focuschangelistener。 當它獲得焦點時,我可以執行onVirtualKeyboardShown()。 如果我可以只聽在EditText中按下的后退鍵,我可以將其解釋為隱藏的虛擬鍵盤。 就像是:
EditText et = ...;
et.setOnFocusChangedListener(new OnFocusChangedListener() {
public void onFocusChanged(boolean focused) {
if (focused) {
// virtual keyboard probably showing.
}
}
});
et.setKeyListener(new KeyListener() {
public void onKeyPressed(int code) {
if (code == BACK_KEY) [
if (et.isFocused()) {
// virtual keyboard probably hiding.
// lose focus to set up for next time.
et.setFocused(false);
}
}
}
});
似乎任何方法都充滿了問題,考慮到虛擬鍵盤之間的所有差異,那么我們也必須處理物理鍵盤,
謝謝
這似乎是不可能的,除了通過使用一些布局大小調整監聽器技巧之外
正確。
我想收到通知,以便在虛擬鍵盤上方顯示自己的建議功能區。
並非所有Android設備都使用虛擬鍵盤。 有些人有物理鍵盤。 由於需要同時支持兩種類型的設備,因此需要提出一種UI設計,該設計不能假定每個人都具有虛擬鍵盤。
// Catch the keyboard height
final LinearLayout masterView = (LinearLayout) findViewById(R.id.conversation_prent);
masterView.getViewTreeObserver().addOnGlobalLayoutListener(
new ViewTreeObserver.OnGlobalLayoutListener() {
public void onGlobalLayout() {
Rect r = new Rect();
masterView.getWindowVisibleDisplayFrame(r);
int result = 0;
int resourceId = getResources().getIdentifier(
"status_bar_height", "dimen", "android");
if (resourceId > 0) {
result = getResources().getDimensionPixelSize(
resourceId);
}
int heightDiff = masterView.getRootView().getHeight()
- masterView.getHeight();
heightDiff = heightDiff - (ab.getHeight() + result);
Log.e("Keyboard Size", "Size: " + heightDiff);
if (heightDiff > 200) {
// The keyboard is shown
} else {
// The keyboard is hidden
}
}
});
如果您的應用程序在android <3(HoneyComb)上運行,請刪除與操作欄相關的代碼部分。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.