Merge change 5188 into donut
* changes: Fixes #1905761. Updates the height of ACTV's drop down whenever the IME changes.
This commit is contained in:
@@ -3485,17 +3485,6 @@
|
|||||||
visibility="public"
|
visibility="public"
|
||||||
>
|
>
|
||||||
</field>
|
</field>
|
||||||
<field name="donut_resource_pad29"
|
|
||||||
type="int"
|
|
||||||
transient="false"
|
|
||||||
volatile="false"
|
|
||||||
value="16843395"
|
|
||||||
static="true"
|
|
||||||
final="true"
|
|
||||||
deprecated="not deprecated"
|
|
||||||
visibility="public"
|
|
||||||
>
|
|
||||||
</field>
|
|
||||||
<field name="donut_resource_pad3"
|
<field name="donut_resource_pad3"
|
||||||
type="int"
|
type="int"
|
||||||
transient="false"
|
transient="false"
|
||||||
@@ -3672,6 +3661,17 @@
|
|||||||
visibility="public"
|
visibility="public"
|
||||||
>
|
>
|
||||||
</field>
|
</field>
|
||||||
|
<field name="dropDownHeight"
|
||||||
|
type="int"
|
||||||
|
transient="false"
|
||||||
|
volatile="false"
|
||||||
|
value="16843395"
|
||||||
|
static="true"
|
||||||
|
final="true"
|
||||||
|
deprecated="not deprecated"
|
||||||
|
visibility="public"
|
||||||
|
>
|
||||||
|
</field>
|
||||||
<field name="dropDownHintAppearance"
|
<field name="dropDownHintAppearance"
|
||||||
type="int"
|
type="int"
|
||||||
transient="false"
|
transient="false"
|
||||||
@@ -162150,6 +162150,17 @@
|
|||||||
visibility="public"
|
visibility="public"
|
||||||
>
|
>
|
||||||
</method>
|
</method>
|
||||||
|
<method name="getDropDownHeight"
|
||||||
|
return="int"
|
||||||
|
abstract="false"
|
||||||
|
native="false"
|
||||||
|
synchronized="false"
|
||||||
|
static="false"
|
||||||
|
final="false"
|
||||||
|
deprecated="not deprecated"
|
||||||
|
visibility="public"
|
||||||
|
>
|
||||||
|
</method>
|
||||||
<method name="getDropDownWidth"
|
<method name="getDropDownWidth"
|
||||||
return="int"
|
return="int"
|
||||||
abstract="false"
|
abstract="false"
|
||||||
@@ -162373,6 +162384,19 @@
|
|||||||
<parameter name="id" type="int">
|
<parameter name="id" type="int">
|
||||||
</parameter>
|
</parameter>
|
||||||
</method>
|
</method>
|
||||||
|
<method name="setDropDownHeight"
|
||||||
|
return="void"
|
||||||
|
abstract="false"
|
||||||
|
native="false"
|
||||||
|
synchronized="false"
|
||||||
|
static="false"
|
||||||
|
final="false"
|
||||||
|
deprecated="not deprecated"
|
||||||
|
visibility="public"
|
||||||
|
>
|
||||||
|
<parameter name="height" type="int">
|
||||||
|
</parameter>
|
||||||
|
</method>
|
||||||
<method name="setDropDownWidth"
|
<method name="setDropDownWidth"
|
||||||
return="void"
|
return="void"
|
||||||
abstract="false"
|
abstract="false"
|
||||||
|
|||||||
@@ -80,6 +80,7 @@ import com.android.internal.R;
|
|||||||
* @attr ref android.R.styleable#AutoCompleteTextView_dropDownSelector
|
* @attr ref android.R.styleable#AutoCompleteTextView_dropDownSelector
|
||||||
* @attr ref android.R.styleable#AutoCompleteTextView_dropDownAnchor
|
* @attr ref android.R.styleable#AutoCompleteTextView_dropDownAnchor
|
||||||
* @attr ref android.R.styleable#AutoCompleteTextView_dropDownWidth
|
* @attr ref android.R.styleable#AutoCompleteTextView_dropDownWidth
|
||||||
|
* @attr ref android.R.styleable#AutoCompleteTextView_dropDownHeight
|
||||||
*/
|
*/
|
||||||
public class AutoCompleteTextView extends EditText implements Filter.FilterListener {
|
public class AutoCompleteTextView extends EditText implements Filter.FilterListener {
|
||||||
static final boolean DEBUG = false;
|
static final boolean DEBUG = false;
|
||||||
@@ -101,6 +102,7 @@ public class AutoCompleteTextView extends EditText implements Filter.FilterListe
|
|||||||
private int mDropDownAnchorId;
|
private int mDropDownAnchorId;
|
||||||
private View mDropDownAnchorView; // view is retrieved lazily from id once needed
|
private View mDropDownAnchorView; // view is retrieved lazily from id once needed
|
||||||
private int mDropDownWidth;
|
private int mDropDownWidth;
|
||||||
|
private int mDropDownHeight;
|
||||||
|
|
||||||
private Drawable mDropDownListHighlight;
|
private Drawable mDropDownListHighlight;
|
||||||
|
|
||||||
@@ -166,6 +168,8 @@ public class AutoCompleteTextView extends EditText implements Filter.FilterListe
|
|||||||
// (for full screen width) or WRAP_CONTENT (to match the width of the anchored view).
|
// (for full screen width) or WRAP_CONTENT (to match the width of the anchored view).
|
||||||
mDropDownWidth = a.getLayoutDimension(R.styleable.AutoCompleteTextView_dropDownWidth,
|
mDropDownWidth = a.getLayoutDimension(R.styleable.AutoCompleteTextView_dropDownWidth,
|
||||||
ViewGroup.LayoutParams.WRAP_CONTENT);
|
ViewGroup.LayoutParams.WRAP_CONTENT);
|
||||||
|
mDropDownHeight = a.getLayoutDimension(R.styleable.AutoCompleteTextView_dropDownHeight,
|
||||||
|
ViewGroup.LayoutParams.WRAP_CONTENT);
|
||||||
|
|
||||||
mHintResource = a.getResourceId(R.styleable.AutoCompleteTextView_completionHintView,
|
mHintResource = a.getResourceId(R.styleable.AutoCompleteTextView_completionHintView,
|
||||||
R.layout.simple_dropdown_hint);
|
R.layout.simple_dropdown_hint);
|
||||||
@@ -254,6 +258,34 @@ public class AutoCompleteTextView extends EditText implements Filter.FilterListe
|
|||||||
public void setDropDownWidth(int width) {
|
public void setDropDownWidth(int width) {
|
||||||
mDropDownWidth = width;
|
mDropDownWidth = width;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* <p>Returns the current height for the auto-complete drop down list. This can
|
||||||
|
* be a fixed height, or {@link ViewGroup.LayoutParams#FILL_PARENT} to fill
|
||||||
|
* the screen, or {@link ViewGroup.LayoutParams#WRAP_CONTENT} to fit the height
|
||||||
|
* of the drop down's content.</p>
|
||||||
|
*
|
||||||
|
* @return the height for the drop down list
|
||||||
|
*
|
||||||
|
* @attr ref android.R.styleable#AutoCompleteTextView_dropDownHeight
|
||||||
|
*/
|
||||||
|
public int getDropDownHeight() {
|
||||||
|
return mDropDownHeight;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* <p>Sets the current height for the auto-complete drop down list. This can
|
||||||
|
* be a fixed height, or {@link ViewGroup.LayoutParams#FILL_PARENT} to fill
|
||||||
|
* the screen, or {@link ViewGroup.LayoutParams#WRAP_CONTENT} to fit the height
|
||||||
|
* of the drop down's content.</p>
|
||||||
|
*
|
||||||
|
* @param height the height to use
|
||||||
|
*
|
||||||
|
* @attr ref android.R.styleable#AutoCompleteTextView_dropDownHeight
|
||||||
|
*/
|
||||||
|
public void setDropDownHeight(int height) {
|
||||||
|
mDropDownHeight = height;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* <p>Returns the id for the view that the auto-complete drop down list is anchored to.</p>
|
* <p>Returns the id for the view that the auto-complete drop down list is anchored to.</p>
|
||||||
@@ -635,7 +667,7 @@ public class AutoCompleteTextView extends EditText implements Filter.FilterListe
|
|||||||
// event to prevent focus from moving.
|
// event to prevent focus from moving.
|
||||||
clearListSelection();
|
clearListSelection();
|
||||||
mPopup.setInputMethodMode(PopupWindow.INPUT_METHOD_NEEDED);
|
mPopup.setInputMethodMode(PopupWindow.INPUT_METHOD_NEEDED);
|
||||||
mPopup.update();
|
showDropDown();
|
||||||
return true;
|
return true;
|
||||||
} else {
|
} else {
|
||||||
// WARNING: Please read the comment where mListSelectionHidden
|
// WARNING: Please read the comment where mListSelectionHidden
|
||||||
@@ -655,7 +687,7 @@ public class AutoCompleteTextView extends EditText implements Filter.FilterListe
|
|||||||
// by ensuring it has focus and getting its window out
|
// by ensuring it has focus and getting its window out
|
||||||
// of touch mode.
|
// of touch mode.
|
||||||
mDropDownList.requestFocusFromTouch();
|
mDropDownList.requestFocusFromTouch();
|
||||||
mPopup.update();
|
showDropDown();
|
||||||
|
|
||||||
switch (keyCode) {
|
switch (keyCode) {
|
||||||
// avoid passing the focus from the text view to the
|
// avoid passing the focus from the text view to the
|
||||||
@@ -1052,8 +1084,13 @@ public class AutoCompleteTextView extends EditText implements Filter.FilterListe
|
|||||||
*/
|
*/
|
||||||
public void showDropDown() {
|
public void showDropDown() {
|
||||||
int height = buildDropDown();
|
int height = buildDropDown();
|
||||||
|
|
||||||
|
int widthSpec = 0;
|
||||||
|
int heightSpec = 0;
|
||||||
|
|
||||||
|
boolean noInputMethod = mPopup.getInputMethodMode() == PopupWindow.INPUT_METHOD_NOT_NEEDED;
|
||||||
|
|
||||||
if (mPopup.isShowing()) {
|
if (mPopup.isShowing()) {
|
||||||
int widthSpec;
|
|
||||||
if (mDropDownWidth == ViewGroup.LayoutParams.FILL_PARENT) {
|
if (mDropDownWidth == ViewGroup.LayoutParams.FILL_PARENT) {
|
||||||
// The call to PopupWindow's update method below can accept -1 for any
|
// The call to PopupWindow's update method below can accept -1 for any
|
||||||
// value you do not want to update.
|
// value you do not want to update.
|
||||||
@@ -1063,20 +1100,51 @@ public class AutoCompleteTextView extends EditText implements Filter.FilterListe
|
|||||||
} else {
|
} else {
|
||||||
widthSpec = mDropDownWidth;
|
widthSpec = mDropDownWidth;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (mDropDownHeight == ViewGroup.LayoutParams.FILL_PARENT) {
|
||||||
|
// The call to PopupWindow's update method below can accept -1 for any
|
||||||
|
// value you do not want to update.
|
||||||
|
heightSpec = noInputMethod ? height : ViewGroup.LayoutParams.FILL_PARENT;
|
||||||
|
if (noInputMethod) {
|
||||||
|
mPopup.setWindowLayoutMode(
|
||||||
|
mDropDownWidth == ViewGroup.LayoutParams.FILL_PARENT ?
|
||||||
|
ViewGroup.LayoutParams.FILL_PARENT : 0, 0);
|
||||||
|
} else {
|
||||||
|
mPopup.setWindowLayoutMode(
|
||||||
|
mDropDownWidth == ViewGroup.LayoutParams.FILL_PARENT ?
|
||||||
|
ViewGroup.LayoutParams.FILL_PARENT : 0,
|
||||||
|
ViewGroup.LayoutParams.FILL_PARENT);
|
||||||
|
}
|
||||||
|
} else if (mDropDownHeight == ViewGroup.LayoutParams.WRAP_CONTENT) {
|
||||||
|
heightSpec = height;
|
||||||
|
} else {
|
||||||
|
heightSpec = mDropDownHeight;
|
||||||
|
}
|
||||||
|
|
||||||
mPopup.update(getDropDownAnchorView(), mDropDownHorizontalOffset,
|
mPopup.update(getDropDownAnchorView(), mDropDownHorizontalOffset,
|
||||||
mDropDownVerticalOffset, widthSpec, height);
|
mDropDownVerticalOffset, widthSpec, heightSpec);
|
||||||
} else {
|
} else {
|
||||||
if (mDropDownWidth == ViewGroup.LayoutParams.FILL_PARENT) {
|
if (mDropDownWidth == ViewGroup.LayoutParams.FILL_PARENT) {
|
||||||
mPopup.setWindowLayoutMode(ViewGroup.LayoutParams.FILL_PARENT, 0);
|
widthSpec = ViewGroup.LayoutParams.FILL_PARENT;
|
||||||
} else {
|
} else {
|
||||||
mPopup.setWindowLayoutMode(0, 0);
|
|
||||||
if (mDropDownWidth == ViewGroup.LayoutParams.WRAP_CONTENT) {
|
if (mDropDownWidth == ViewGroup.LayoutParams.WRAP_CONTENT) {
|
||||||
mPopup.setWidth(getDropDownAnchorView().getWidth());
|
mPopup.setWidth(getDropDownAnchorView().getWidth());
|
||||||
} else {
|
} else {
|
||||||
mPopup.setWidth(mDropDownWidth);
|
mPopup.setWidth(mDropDownWidth);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
mPopup.setHeight(height);
|
|
||||||
|
if (mDropDownHeight == ViewGroup.LayoutParams.FILL_PARENT) {
|
||||||
|
heightSpec = ViewGroup.LayoutParams.FILL_PARENT;
|
||||||
|
} else {
|
||||||
|
if (mDropDownHeight == ViewGroup.LayoutParams.WRAP_CONTENT) {
|
||||||
|
mPopup.setHeight(height);
|
||||||
|
} else {
|
||||||
|
mPopup.setHeight(mDropDownHeight);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
mPopup.setWindowLayoutMode(widthSpec, heightSpec);
|
||||||
mPopup.setInputMethodMode(PopupWindow.INPUT_METHOD_NEEDED);
|
mPopup.setInputMethodMode(PopupWindow.INPUT_METHOD_NEEDED);
|
||||||
|
|
||||||
// use outside touchable to dismiss drop down when touching outside of it, so
|
// use outside touchable to dismiss drop down when touching outside of it, so
|
||||||
@@ -1195,10 +1263,12 @@ public class AutoCompleteTextView extends EditText implements Filter.FilterListe
|
|||||||
final int maxHeight = mPopup.getMaxAvailableHeight(
|
final int maxHeight = mPopup.getMaxAvailableHeight(
|
||||||
getDropDownAnchorView(), mDropDownVerticalOffset, ignoreBottomDecorations);
|
getDropDownAnchorView(), mDropDownVerticalOffset, ignoreBottomDecorations);
|
||||||
|
|
||||||
final int measuredHeight = mDropDownList.measureHeightOfChildren(MeasureSpec.UNSPECIFIED,
|
if (mDropDownAlwaysVisible) {
|
||||||
0, ListView.NO_POSITION, maxHeight - otherHeights, 2) + otherHeights;
|
return maxHeight;
|
||||||
|
}
|
||||||
|
|
||||||
return mDropDownAlwaysVisible ? maxHeight : measuredHeight;
|
return mDropDownList.measureHeightOfChildren(MeasureSpec.UNSPECIFIED,
|
||||||
|
0, ListView.NO_POSITION, maxHeight - otherHeights, 2) + otherHeights;
|
||||||
}
|
}
|
||||||
|
|
||||||
private View getHintView(Context context) {
|
private View getHintView(Context context) {
|
||||||
|
|||||||
@@ -49,7 +49,7 @@ import java.lang.ref.WeakReference;
|
|||||||
*/
|
*/
|
||||||
public class PopupWindow {
|
public class PopupWindow {
|
||||||
/**
|
/**
|
||||||
* Mode for {@link #setInputMethodMode(int): the requirements for the
|
* Mode for {@link #setInputMethodMode(int)}: the requirements for the
|
||||||
* input method should be based on the focusability of the popup. That is
|
* input method should be based on the focusability of the popup. That is
|
||||||
* if it is focusable than it needs to work with the input method, else
|
* if it is focusable than it needs to work with the input method, else
|
||||||
* it doesn't.
|
* it doesn't.
|
||||||
@@ -57,16 +57,15 @@ public class PopupWindow {
|
|||||||
public static final int INPUT_METHOD_FROM_FOCUSABLE = 0;
|
public static final int INPUT_METHOD_FROM_FOCUSABLE = 0;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Mode for {@link #setInputMethodMode(int): this popup always needs to
|
* Mode for {@link #setInputMethodMode(int)}: this popup always needs to
|
||||||
* work with an input method, regardless of whether it is focusable. This
|
* work with an input method, regardless of whether it is focusable. This
|
||||||
* means that it will always be displayed so that the user can also operate
|
* means that it will always be displayed so that the user can also operate
|
||||||
* the input method while it is shown.
|
* the input method while it is shown.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
public static final int INPUT_METHOD_NEEDED = 1;
|
public static final int INPUT_METHOD_NEEDED = 1;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Mode for {@link #setInputMethodMode(int): this popup never needs to
|
* Mode for {@link #setInputMethodMode(int)}: this popup never needs to
|
||||||
* work with an input method, regardless of whether it is focusable. This
|
* work with an input method, regardless of whether it is focusable. This
|
||||||
* means that it will always be displayed to use as much space on the
|
* means that it will always be displayed to use as much space on the
|
||||||
* screen as needed, regardless of whether this covers the input method.
|
* screen as needed, regardless of whether this covers the input method.
|
||||||
@@ -1131,8 +1130,7 @@ public class PopupWindow {
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
WindowManager.LayoutParams p = (WindowManager.LayoutParams)
|
WindowManager.LayoutParams p = (WindowManager.LayoutParams) mPopupView.getLayoutParams();
|
||||||
mPopupView.getLayoutParams();
|
|
||||||
|
|
||||||
boolean update = force;
|
boolean update = force;
|
||||||
|
|
||||||
@@ -1219,8 +1217,7 @@ public class PopupWindow {
|
|||||||
registerForScrollChanged(anchor, xoff, yoff);
|
registerForScrollChanged(anchor, xoff, yoff);
|
||||||
}
|
}
|
||||||
|
|
||||||
WindowManager.LayoutParams p = (WindowManager.LayoutParams)
|
WindowManager.LayoutParams p = (WindowManager.LayoutParams) mPopupView.getLayoutParams();
|
||||||
mPopupView.getLayoutParams();
|
|
||||||
|
|
||||||
if (updateDimension) {
|
if (updateDimension) {
|
||||||
if (width == -1) {
|
if (width == -1) {
|
||||||
|
|||||||
@@ -76,6 +76,7 @@
|
|||||||
android:ellipsize="end"
|
android:ellipsize="end"
|
||||||
android:inputType="text|textAutoComplete"
|
android:inputType="text|textAutoComplete"
|
||||||
android:dropDownWidth="fill_parent"
|
android:dropDownWidth="fill_parent"
|
||||||
|
android:dropDownHeight="fill_parent"
|
||||||
android:dropDownAnchor="@id/search_plate"
|
android:dropDownAnchor="@id/search_plate"
|
||||||
android:dropDownVerticalOffset="-9dip"
|
android:dropDownVerticalOffset="-9dip"
|
||||||
android:popupBackground="@android:drawable/search_dropdown_background"
|
android:popupBackground="@android:drawable/search_dropdown_background"
|
||||||
|
|||||||
@@ -1998,6 +1998,16 @@
|
|||||||
<!-- The dropdown should fit the width of its anchor. -->
|
<!-- The dropdown should fit the width of its anchor. -->
|
||||||
<enum name="wrap_content" value="-2" />
|
<enum name="wrap_content" value="-2" />
|
||||||
</attr>
|
</attr>
|
||||||
|
<!-- Specifies the basic width of the dropdown. Its value may
|
||||||
|
be a dimension (such as "12dip") for a constant width, fill_parent
|
||||||
|
to fill the width of the screen, or wrap_content to match the height of
|
||||||
|
the content of the drop down. -->
|
||||||
|
<attr name="dropDownHeight" format="dimension">
|
||||||
|
<!-- The dropdown should fill the width of the screen. -->
|
||||||
|
<enum name="fill_parent" value="-1" />
|
||||||
|
<!-- The dropdown should fit the width of its anchor. -->
|
||||||
|
<enum name="wrap_content" value="-2" />
|
||||||
|
</attr>
|
||||||
<attr name="inputType" />
|
<attr name="inputType" />
|
||||||
</declare-styleable>
|
</declare-styleable>
|
||||||
<declare-styleable name="PopupWindow">
|
<declare-styleable name="PopupWindow">
|
||||||
|
|||||||
@@ -1116,7 +1116,8 @@
|
|||||||
<public type="attr" name="allowBackup" />
|
<public type="attr" name="allowBackup" />
|
||||||
<public type="attr" name="glEsVersion" />
|
<public type="attr" name="glEsVersion" />
|
||||||
<public type="attr" name="queryAfterZeroResults" />
|
<public type="attr" name="queryAfterZeroResults" />
|
||||||
|
<public type="attr" name="dropDownHeight" />
|
||||||
|
|
||||||
<public-padding type="attr" name="donut_resource_pad" end="0x0101029f" />
|
<public-padding type="attr" name="donut_resource_pad" end="0x0101029f" />
|
||||||
|
|
||||||
<public-padding type="id" name="donut_resource_pad" end="0x01020040" />
|
<public-padding type="id" name="donut_resource_pad" end="0x01020040" />
|
||||||
|
|||||||
Reference in New Issue
Block a user