diff --git a/modules/juce_core/native/java/JuceAppActivity.java b/modules/juce_core/native/java/JuceAppActivity.java index b649ef5a76..63ede84ffa 100644 --- a/modules/juce_core/native/java/JuceAppActivity.java +++ b/modules/juce_core/native/java/JuceAppActivity.java @@ -808,20 +808,38 @@ public class JuceAppActivity extends $$JuceAppActivityBaseClass$$ } private class TreeObserver implements ViewTreeObserver.OnGlobalLayoutListener - { + { + TreeObserver() + { + keyboardShown = false; + } + @Override public void onGlobalLayout() { Rect r = new Rect(); + + ViewGroup parentView = (ViewGroup) getParent(); + + if (parentView == null) + return; - view.getWindowVisibleDisplayFrame(r); + parentView.getWindowVisibleDisplayFrame (r); - int diff = view.getHeight() - (r.bottom - r.top); + int diff = parentView.getHeight() - (r.bottom - r.top); // Arbitrary threshold, surely keyboard would take more than 20 pix. - if (diff < 20) - handleKeyboardHidden (view.host); - }; + if (diff < 20 && keyboardShown) + { + keyboardShown = false; + handleKeyboardHidden (view.host); + } + + if (! keyboardShown && diff > 20) + keyboardShown = true; + }; + + private boolean keyboardShown; }; private ComponentPeerView view;