Merge "Better fix for bug 3112733" into honeycomb
This commit is contained in:
@@ -28,7 +28,6 @@ import android.graphics.drawable.StateListDrawable;
|
|||||||
import android.os.Build;
|
import android.os.Build;
|
||||||
import android.os.IBinder;
|
import android.os.IBinder;
|
||||||
import android.util.AttributeSet;
|
import android.util.AttributeSet;
|
||||||
import android.util.DisplayMetrics;
|
|
||||||
import android.view.Gravity;
|
import android.view.Gravity;
|
||||||
import android.view.KeyEvent;
|
import android.view.KeyEvent;
|
||||||
import android.view.MotionEvent;
|
import android.view.MotionEvent;
|
||||||
@@ -1087,7 +1086,14 @@ public class PopupWindow {
|
|||||||
p.width = Math.min(p.width, displayFrameWidth);
|
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;
|
p.gravity |= Gravity.DISPLAY_CLIP_VERTICAL;
|
||||||
|
|||||||
@@ -23,14 +23,13 @@ import android.content.DialogInterface;
|
|||||||
import android.content.DialogInterface.OnClickListener;
|
import android.content.DialogInterface.OnClickListener;
|
||||||
import android.content.res.TypedArray;
|
import android.content.res.TypedArray;
|
||||||
import android.database.DataSetObserver;
|
import android.database.DataSetObserver;
|
||||||
import android.graphics.Rect;
|
|
||||||
import android.graphics.drawable.Drawable;
|
import android.graphics.drawable.Drawable;
|
||||||
|
import android.graphics.Rect;
|
||||||
import android.util.AttributeSet;
|
import android.util.AttributeSet;
|
||||||
import android.util.DisplayMetrics;
|
import android.util.DisplayMetrics;
|
||||||
import android.view.Gravity;
|
import android.view.Gravity;
|
||||||
import android.view.View;
|
import android.view.View;
|
||||||
import android.view.ViewGroup;
|
import android.view.ViewGroup;
|
||||||
import android.view.ViewTreeObserver;
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -70,8 +69,6 @@ public class Spinner extends AbsSpinner implements OnClickListener {
|
|||||||
|
|
||||||
private int mGravity;
|
private int mGravity;
|
||||||
|
|
||||||
private LayoutObserver mLayoutObserver;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Construct a new spinner with the given context's theme.
|
* 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));
|
com.android.internal.R.styleable.Spinner_dropDownHorizontalOffset, 0));
|
||||||
|
|
||||||
mPopup = popup;
|
mPopup = popup;
|
||||||
mLayoutObserver = new LayoutObserver();
|
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -425,11 +421,6 @@ public class Spinner extends AbsSpinner implements OnClickListener {
|
|||||||
handled = true;
|
handled = true;
|
||||||
|
|
||||||
if (!mPopup.isShowing()) {
|
if (!mPopup.isShowing()) {
|
||||||
if (mLayoutObserver != null) {
|
|
||||||
final ViewTreeObserver vto = getViewTreeObserver();
|
|
||||||
vto.addOnGlobalLayoutListener(mLayoutObserver);
|
|
||||||
vto.addOnScrollChangedListener(mLayoutObserver);
|
|
||||||
}
|
|
||||||
mPopup.show();
|
mPopup.show();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -677,7 +668,6 @@ public class Spinner extends AbsSpinner implements OnClickListener {
|
|||||||
super.show();
|
super.show();
|
||||||
getListView().setChoiceMode(ListView.CHOICE_MODE_SINGLE);
|
getListView().setChoiceMode(ListView.CHOICE_MODE_SINGLE);
|
||||||
setSelection(Spinner.this.getSelectedItemPosition());
|
setSelection(Spinner.this.getSelectedItemPosition());
|
||||||
setOnDismissListener(mLayoutObserver);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@@ -728,28 +718,4 @@ public class Spinner extends AbsSpinner implements OnClickListener {
|
|||||||
ViewGroup.LayoutParams.WRAP_CONTENT);
|
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);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user