簡體   English   中英

在為EditText顯示/解除虛擬鍵盤時收到通知?

[英]Getting notified when virtual keyboard shown / dismissed for an EditText?

我想在顯示/解除虛擬鍵盤時收到通知。 這似乎不可能,除了使用一些布局調整大小的偵聽器技巧:

如何檢查Android中軟件鍵盤的可見性?

我的活動只有一個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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM