summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
author Fabrice Di Meglio <fdimeglio@google.com> 2012-07-27 15:15:04 -0700
committer Fabrice Di Meglio <fdimeglio@google.com> 2012-07-30 11:27:31 -0700
commit1d3d7da331a3e9dc783819ab6fe29ea21c873f1e (patch)
tree2440235568953573dc1df1d81b678ab43fb1dd76
parentd395ea124be07cab29eb7ee72526dbe79daa634d (diff)
Improve ListPopupWindow RTL support
- add Javadoc for new method setLayoutDirection() - fix one issue where the layout direction would not be set when the popup was recreated Change-Id: Ic53a8b0d01dc86e03e9bf5f09195af77404dca39
-rw-r--r--core/java/android/widget/ListPopupWindow.java23
1 files changed, 21 insertions, 2 deletions
diff --git a/core/java/android/widget/ListPopupWindow.java b/core/java/android/widget/ListPopupWindow.java
index 100b8724aade..3baf5a9a3555 100644
--- a/core/java/android/widget/ListPopupWindow.java
+++ b/core/java/android/widget/ListPopupWindow.java
@@ -22,6 +22,7 @@ import android.graphics.Rect;
import android.graphics.drawable.Drawable;
import android.os.Handler;
import android.util.AttributeSet;
+import android.util.LocaleUtil;
import android.util.Log;
import android.view.KeyEvent;
import android.view.MotionEvent;
@@ -31,6 +32,8 @@ import android.view.View.OnTouchListener;
import android.view.ViewGroup;
import android.view.ViewParent;
+import java.util.Locale;
+
/**
* A ListPopupWindow anchors itself to a host view and displays a
* list of choices.
@@ -92,6 +95,8 @@ public class ListPopupWindow {
private boolean mModal;
+ private int mLayoutDirection;
+
/**
* The provided prompt view should appear above list content.
*
@@ -193,6 +198,9 @@ public class ListPopupWindow {
mContext = context;
mPopup = new PopupWindow(context, attrs, defStyleAttr, defStyleRes);
mPopup.setInputMethodMode(PopupWindow.INPUT_METHOD_NEEDED);
+ // Set the default layout direction to match the default locale one
+ final Locale locale = mContext.getResources().getConfiguration().locale;
+ mLayoutDirection = LocaleUtil.getLayoutDirectionFromLocale(locale);
}
/**
@@ -1013,6 +1021,8 @@ public class ListPopupWindow {
mDropDownList.setOnItemSelectedListener(mItemSelectedListener);
}
+ mDropDownList.setLayoutDirection(mLayoutDirection);
+
dropDownView = mDropDownList;
View hintView = mPromptView;
@@ -1121,9 +1131,18 @@ public class ListPopupWindow {
return listContent + otherHeights;
}
- public void setLayoutDirection(int resolvedLayoutDirection) {
+ /**
+ * Set the layout direction for this popup. Should be a resolved direction as the
+ * popup as no capacity to do the resolution on his own.
+ *
+ * @param layoutDirection One of {@link View#LAYOUT_DIRECTION_LTR},
+ * {@link View#LAYOUT_DIRECTION_RTL},
+ *
+ */
+ public void setLayoutDirection(int layoutDirection) {
+ mLayoutDirection = layoutDirection;
if (mDropDownList != null) {
- mDropDownList.setLayoutDirection(resolvedLayoutDirection);
+ mDropDownList.setLayoutDirection(mLayoutDirection);
}
}