diff options
| author | Jack Veenstra <veenstra@android.com> | 2009-09-21 19:45:14 -0700 |
|---|---|---|
| committer | Jack Veenstra <veenstra@android.com> | 2009-09-21 19:45:14 -0700 |
| commit | 7d4200d03fa55a13eda63f979dcf47792f0af31d (patch) | |
| tree | dbaa4743fc61b389149fb84c5415f2ad055bbb4a /core/java/android/widget/ScrollView.java | |
| parent | a13ccc908ee54d6c606b5a73b3a57e4dda13e44a (diff) | |
Fix bug with ScrollView so that text entry fields are not hidden by virtual keyboard.
Diffstat (limited to 'core/java/android/widget/ScrollView.java')
| -rw-r--r-- | core/java/android/widget/ScrollView.java | 15 |
1 files changed, 8 insertions, 7 deletions
diff --git a/core/java/android/widget/ScrollView.java b/core/java/android/widget/ScrollView.java index 703cd8e278b7..31c78146c98e 100644 --- a/core/java/android/widget/ScrollView.java +++ b/core/java/android/widget/ScrollView.java @@ -743,7 +743,7 @@ public class ScrollView extends FrameLayout { final int maxJump = getMaxScrollAmount(); - if (nextFocused != null && isWithinDeltaOfScreen(nextFocused, maxJump)) { + if (nextFocused != null && isWithinDeltaOfScreen(nextFocused, maxJump, getHeight())) { nextFocused.getDrawingRect(mTempRect); offsetDescendantRectToMyCoords(nextFocused, mTempRect); int scrollDelta = computeScrollDeltaToGetChildRectOnScreen(mTempRect); @@ -792,19 +792,19 @@ public class ScrollView extends FrameLayout { * screen. */ private boolean isOffScreen(View descendant) { - return !isWithinDeltaOfScreen(descendant, 0); + return !isWithinDeltaOfScreen(descendant, 0, getHeight()); } /** * @return whether the descendant of this scroll view is within delta * pixels of being on the screen. */ - private boolean isWithinDeltaOfScreen(View descendant, int delta) { + private boolean isWithinDeltaOfScreen(View descendant, int delta, int height) { descendant.getDrawingRect(mTempRect); offsetDescendantRectToMyCoords(descendant, mTempRect); return (mTempRect.bottom + delta) >= getScrollY() - && (mTempRect.top - delta) <= (getScrollY() + getHeight()); + && (mTempRect.top - delta) <= (getScrollY() + height); } /** @@ -1124,9 +1124,10 @@ public class ScrollView extends FrameLayout { if (null == currentFocused || this == currentFocused) return; - final int maxJump = mBottom - mTop; - - if (isWithinDeltaOfScreen(currentFocused, maxJump)) { + // If the currently-focused view was visible on the screen when the + // screen was at the old height, then scroll the screen to make that + // view visible with the new screen height. + if (isWithinDeltaOfScreen(currentFocused, 0, oldh)) { currentFocused.getDrawingRect(mTempRect); offsetDescendantRectToMyCoords(currentFocused, mTempRect); int scrollDelta = computeScrollDeltaToGetChildRectOnScreen(mTempRect); |
