diff options
| -rw-r--r-- | api/current.txt | 1 | ||||
| -rw-r--r-- | core/java/android/view/View.java | 26 |
2 files changed, 23 insertions, 4 deletions
diff --git a/api/current.txt b/api/current.txt index 5418072dd0f7..634b050cc2e8 100644 --- a/api/current.txt +++ b/api/current.txt @@ -22080,6 +22080,7 @@ package android.view { method public void buildDrawingCache(); method public void buildDrawingCache(boolean); method public void buildLayer(); + method protected boolean canResolveLayoutDirection(); method public boolean canScrollHorizontally(int); method public boolean canScrollVertically(int); method public void cancelLongPress(); diff --git a/core/java/android/view/View.java b/core/java/android/view/View.java index 74dc10071e6b..8cd683ea6081 100644 --- a/core/java/android/view/View.java +++ b/core/java/android/view/View.java @@ -9066,11 +9066,20 @@ public class View implements Drawable.Callback2, KeyEvent.Callback, Accessibilit // Set resolved depending on layout direction switch (getLayoutDirection()) { case LAYOUT_DIRECTION_INHERIT: + // We cannot do the resolution if there is no parent + if (mParent == null) return; + // If this is root view, no need to look at parent's layout dir. - if (mParent != null && - mParent instanceof ViewGroup && - ((ViewGroup) mParent).getResolvedLayoutDirection() == LAYOUT_DIRECTION_RTL) { - mPrivateFlags2 |= LAYOUT_DIRECTION_RESOLVED_RTL; + if (mParent instanceof ViewGroup) { + ViewGroup viewGroup = ((ViewGroup) mParent); + + // Check if the parent view group can resolve + if (! viewGroup.canResolveLayoutDirection()) { + return; + } + if (viewGroup.getResolvedLayoutDirection() == LAYOUT_DIRECTION_RTL) { + mPrivateFlags2 |= LAYOUT_DIRECTION_RESOLVED_RTL; + } } break; case LAYOUT_DIRECTION_RTL: @@ -9132,6 +9141,15 @@ public class View implements Drawable.Callback2, KeyEvent.Callback, Accessibilit recomputePadding(); } + protected boolean canResolveLayoutDirection() { + switch (getLayoutDirection()) { + case LAYOUT_DIRECTION_INHERIT: + return (mParent != null); + default: + return true; + } + } + /** * Reset the resolved layout direction. * |