diff options
| author | Craig Stout <cstout@google.com> | 2014-07-02 15:23:16 -0700 |
|---|---|---|
| committer | Craig Stout <cstout@google.com> | 2014-07-07 17:43:52 +0000 |
| commit | f209ef9c3a80f9fcc4b8467626d50746ef2ab52b (patch) | |
| tree | a097ba8110ce36211a3f7e3e9801c45b5664aae8 /core/java/android/widget/TextView.java | |
| parent | 620a5466ce5f401aafa6a438383016640ec51d1a (diff) | |
Fix TextView drawing issue.
The predraw listener was lost because the view was detached and reattached
after layout but before the first draw.
b/15376022
Change-Id: Idf38f7373df3c457f54b6e3f995b00256914f775
Diffstat (limited to 'core/java/android/widget/TextView.java')
| -rw-r--r-- | core/java/android/widget/TextView.java | 17 |
1 files changed, 14 insertions, 3 deletions
diff --git a/core/java/android/widget/TextView.java b/core/java/android/widget/TextView.java index 5743882d5122..2381a785f6cc 100644 --- a/core/java/android/widget/TextView.java +++ b/core/java/android/widget/TextView.java @@ -293,6 +293,7 @@ public class TextView extends View implements ViewTreeObserver.OnPreDrawListener private boolean mPreDrawRegistered; + private boolean mPreDrawListenerDetached; // A flag to prevent repeated movements from escaping the enclosing text view. The idea here is // that if a user is holding down a movement key to traverse text, we shouldn't also traverse @@ -4719,6 +4720,12 @@ public class TextView extends View implements ViewTreeObserver.OnPreDrawListener } } + private void unregisterForPreDraw() { + getViewTreeObserver().removeOnPreDrawListener(this); + mPreDrawRegistered = false; + mPreDrawListenerDetached = false; + } + /** * {@inheritDoc} */ @@ -4770,8 +4777,7 @@ public class TextView extends View implements ViewTreeObserver.OnPreDrawListener mEditor.startSelectionActionMode(); } - getViewTreeObserver().removeOnPreDrawListener(this); - mPreDrawRegistered = false; + unregisterForPreDraw(); return true; } @@ -4783,6 +4789,11 @@ public class TextView extends View implements ViewTreeObserver.OnPreDrawListener mTemporaryDetach = false; if (mEditor != null) mEditor.onAttachedToWindow(); + + if (mPreDrawListenerDetached) { + getViewTreeObserver().addOnPreDrawListener(this); + mPreDrawListenerDetached = false; + } } /** @hide */ @@ -4790,7 +4801,7 @@ public class TextView extends View implements ViewTreeObserver.OnPreDrawListener protected void onDetachedFromWindowInternal() { if (mPreDrawRegistered) { getViewTreeObserver().removeOnPreDrawListener(this); - mPreDrawRegistered = false; + mPreDrawListenerDetached = true; } resetResolvedDrawables(); |
