summaryrefslogtreecommitdiff
path: root/core/java/android/widget/Spinner.java
diff options
context:
space:
mode:
authorSeongJae Park <sj38.park@gmail.com>2012-02-29 01:56:43 +0900
committerSeongJae Park <sj38.park@gmail.com>2012-02-29 10:48:11 +0900
commit95148495fc3d33e4ad4dcbdee83317422db94dbf (patch)
treee2d208062aea2f3dda777a8e7f5157b422a71cf3 /core/java/android/widget/Spinner.java
parentd7fa7deef9bc0cf22bf450fdb062327697c087c4 (diff)
Set width of spinner's dropdown to fit on device
Commit for issue at http://code.google.com/p/android/issues/detail?id=25916&colspec=ID%20Type%20Status%20Owner%20Summary%20Stars&start=100 [Problem] Dropdown popup of Spinner become wider than device's width if selected item's content's width is larger than device's screen. [Cause] Spinner just display dropdown popup with measured content's width although measured content's width is wider than device's screen. [Solution] If calculated content's width is wider than device's screen, set width of spinner's dropdown popup to fit on device. Change-Id: I3276e5ff745c6ba1437c07fc55645d6b53fef89a Signed-off-by: SeongJae Park <sj38.park@gmail.com>
Diffstat (limited to 'core/java/android/widget/Spinner.java')
-rw-r--r--core/java/android/widget/Spinner.java34
1 files changed, 23 insertions, 11 deletions
diff --git a/core/java/android/widget/Spinner.java b/core/java/android/widget/Spinner.java
index ec3790ec2710..6499f9acfeba 100644
--- a/core/java/android/widget/Spinner.java
+++ b/core/java/android/widget/Spinner.java
@@ -26,6 +26,7 @@ import android.database.DataSetObserver;
import android.graphics.Rect;
import android.graphics.drawable.Drawable;
import android.util.AttributeSet;
+import android.util.DisplayMetrics;
import android.view.Gravity;
import android.view.View;
import android.view.ViewGroup;
@@ -38,13 +39,13 @@ import android.view.ViewGroup;
*
* <p>See the <a href="{@docRoot}resources/tutorials/views/hello-spinner.html">Spinner
* tutorial</a>.</p>
- *
+ *
* @attr ref android.R.styleable#Spinner_prompt
*/
@Widget
public class Spinner extends AbsSpinner implements OnClickListener {
private static final String TAG = "Spinner";
-
+
// Only measure this many items to get a decent max width.
private static final int MAX_ITEMS_MEASURED = 15;
@@ -52,7 +53,7 @@ public class Spinner extends AbsSpinner implements OnClickListener {
* Use a dialog window for selecting spinner options.
*/
public static final int MODE_DIALOG = 0;
-
+
/**
* Use a dropdown anchored to the Spinner for selecting spinner options.
*/
@@ -732,13 +733,30 @@ public class Spinner extends AbsSpinner implements OnClickListener {
@Override
public void show() {
+ final Drawable background = getBackground();
+ int bgOffset = 0;
+ if (background != null) {
+ background.getPadding(mTempRect);
+ bgOffset = -mTempRect.left;
+ } else {
+ mTempRect.left = mTempRect.right = 0;
+ }
+
final int spinnerPaddingLeft = Spinner.this.getPaddingLeft();
if (mDropDownWidth == WRAP_CONTENT) {
final int spinnerWidth = Spinner.this.getWidth();
final int spinnerPaddingRight = Spinner.this.getPaddingRight();
+
+ int contentWidth = measureContentWidth(
+ (SpinnerAdapter) mAdapter, getBackground());
+ final int contentWidthLimit = mContext.getResources()
+ .getDisplayMetrics().widthPixels - mTempRect.left - mTempRect.right;
+ if (contentWidth > contentWidthLimit) {
+ contentWidth = contentWidthLimit;
+ }
+
setContentWidth(Math.max(
- measureContentWidth((SpinnerAdapter) mAdapter, getBackground()),
- spinnerWidth - spinnerPaddingLeft - spinnerPaddingRight));
+ contentWidth, spinnerWidth - spinnerPaddingLeft - spinnerPaddingRight));
} else if (mDropDownWidth == MATCH_PARENT) {
final int spinnerWidth = Spinner.this.getWidth();
final int spinnerPaddingRight = Spinner.this.getPaddingRight();
@@ -746,12 +764,6 @@ public class Spinner extends AbsSpinner implements OnClickListener {
} else {
setContentWidth(mDropDownWidth);
}
- final Drawable background = getBackground();
- int bgOffset = 0;
- if (background != null) {
- background.getPadding(mTempRect);
- bgOffset = -mTempRect.left;
- }
setHorizontalOffset(bgOffset + spinnerPaddingLeft);
setInputMethodMode(ListPopupWindow.INPUT_METHOD_NOT_NEEDED);
super.show();