diff --git a/core/java/android/widget/PopupWindow.java b/core/java/android/widget/PopupWindow.java index 79d6a81d24616..439e0cabe19ff 100644 --- a/core/java/android/widget/PopupWindow.java +++ b/core/java/android/widget/PopupWindow.java @@ -28,7 +28,6 @@ import android.graphics.drawable.StateListDrawable; import android.os.Build; import android.os.IBinder; import android.util.AttributeSet; -import android.util.DisplayMetrics; import android.view.Gravity; import android.view.KeyEvent; import android.view.MotionEvent; @@ -1087,7 +1086,14 @@ public class PopupWindow { p.width = Math.min(p.width, displayFrameWidth); } - p.y = Math.max(p.y, displayFrame.top); + if (onTop) { + int popupTop = mScreenLocation[1] + yoff - mPopupHeight; + if (popupTop < 0) { + p.y += popupTop; + } + } else { + p.y = Math.max(p.y, displayFrame.top); + } } p.gravity |= Gravity.DISPLAY_CLIP_VERTICAL; diff --git a/core/java/android/widget/Spinner.java b/core/java/android/widget/Spinner.java index e38a69fde005e..0baddcb975011 100644 --- a/core/java/android/widget/Spinner.java +++ b/core/java/android/widget/Spinner.java @@ -23,14 +23,13 @@ import android.content.DialogInterface; import android.content.DialogInterface.OnClickListener; import android.content.res.TypedArray; import android.database.DataSetObserver; -import android.graphics.Rect; import android.graphics.drawable.Drawable; +import android.graphics.Rect; import android.util.AttributeSet; import android.util.DisplayMetrics; import android.view.Gravity; import android.view.View; import android.view.ViewGroup; -import android.view.ViewTreeObserver; /** @@ -70,8 +69,6 @@ public class Spinner extends AbsSpinner implements OnClickListener { private int mGravity; - private LayoutObserver mLayoutObserver; - /** * Construct a new spinner with the given context's theme. * @@ -172,7 +169,6 @@ public class Spinner extends AbsSpinner implements OnClickListener { com.android.internal.R.styleable.Spinner_dropDownHorizontalOffset, 0)); mPopup = popup; - mLayoutObserver = new LayoutObserver(); break; } } @@ -425,11 +421,6 @@ public class Spinner extends AbsSpinner implements OnClickListener { handled = true; if (!mPopup.isShowing()) { - if (mLayoutObserver != null) { - final ViewTreeObserver vto = getViewTreeObserver(); - vto.addOnGlobalLayoutListener(mLayoutObserver); - vto.addOnScrollChangedListener(mLayoutObserver); - } mPopup.show(); } } @@ -677,7 +668,6 @@ public class Spinner extends AbsSpinner implements OnClickListener { super.show(); getListView().setChoiceMode(ListView.CHOICE_MODE_SINGLE); setSelection(Spinner.this.getSelectedItemPosition()); - setOnDismissListener(mLayoutObserver); } @Override @@ -728,28 +718,4 @@ public class Spinner extends AbsSpinner implements OnClickListener { ViewGroup.LayoutParams.WRAP_CONTENT); } } - - private class LayoutObserver implements ViewTreeObserver.OnGlobalLayoutListener, - ViewTreeObserver.OnScrollChangedListener, PopupWindow.OnDismissListener { - @Override - public void onScrollChanged() { - if (mPopup != null && mPopup.isShowing()) { - mPopup.show(); - } - } - - @Override - public void onGlobalLayout() { - if (mPopup != null && mPopup.isShowing()) { - mPopup.show(); - } - } - - @Override - public void onDismiss() { - ViewTreeObserver vto = getViewTreeObserver(); - vto.removeGlobalOnLayoutListener(mLayoutObserver); - vto.removeOnScrollChangedListener(mLayoutObserver); - } - } }