summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--api/current.xml46
-rw-r--r--core/java/android/widget/AutoCompleteTextView.java90
-rw-r--r--core/java/android/widget/PopupWindow.java13
-rw-r--r--core/res/res/layout/search_bar.xml1
-rw-r--r--core/res/res/values/attrs.xml10
-rw-r--r--core/res/res/values/public.xml3
6 files changed, 133 insertions, 30 deletions
diff --git a/api/current.xml b/api/current.xml
index cd9cf5d..a3daa86 100644
--- a/api/current.xml
+++ b/api/current.xml
@@ -3562,17 +3562,6 @@
visibility="public"
>
</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"
type="int"
transient="false"
@@ -3749,6 +3738,17 @@
visibility="public"
>
</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"
type="int"
transient="false"
@@ -166081,6 +166081,17 @@
visibility="public"
>
</method>
+<method name="getDropDownHeight"
+ return="int"
+ abstract="false"
+ native="false"
+ synchronized="false"
+ static="false"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</method>
<method name="getDropDownHorizontalOffset"
return="int"
abstract="false"
@@ -166352,6 +166363,19 @@
<parameter name="id" type="int">
</parameter>
</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="setDropDownHorizontalOffset"
return="void"
abstract="false"
diff --git a/core/java/android/widget/AutoCompleteTextView.java b/core/java/android/widget/AutoCompleteTextView.java
index 746d5c3..96cc2fd 100644
--- a/core/java/android/widget/AutoCompleteTextView.java
+++ b/core/java/android/widget/AutoCompleteTextView.java
@@ -80,6 +80,7 @@ import com.android.internal.R;
* @attr ref android.R.styleable#AutoCompleteTextView_dropDownSelector
* @attr ref android.R.styleable#AutoCompleteTextView_dropDownAnchor
* @attr ref android.R.styleable#AutoCompleteTextView_dropDownWidth
+ * @attr ref android.R.styleable#AutoCompleteTextView_dropDownHeight
*/
public class AutoCompleteTextView extends EditText implements Filter.FilterListener {
static final boolean DEBUG = false;
@@ -101,6 +102,7 @@ public class AutoCompleteTextView extends EditText implements Filter.FilterListe
private int mDropDownAnchorId;
private View mDropDownAnchorView; // view is retrieved lazily from id once needed
private int mDropDownWidth;
+ private int mDropDownHeight;
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).
mDropDownWidth = a.getLayoutDimension(R.styleable.AutoCompleteTextView_dropDownWidth,
ViewGroup.LayoutParams.WRAP_CONTENT);
+ mDropDownHeight = a.getLayoutDimension(R.styleable.AutoCompleteTextView_dropDownHeight,
+ ViewGroup.LayoutParams.WRAP_CONTENT);
mHintResource = a.getResourceId(R.styleable.AutoCompleteTextView_completionHintView,
R.layout.simple_dropdown_hint);
@@ -254,6 +258,34 @@ public class AutoCompleteTextView extends EditText implements Filter.FilterListe
public void setDropDownWidth(int 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>
@@ -621,7 +653,7 @@ public class AutoCompleteTextView extends EditText implements Filter.FilterListe
// event to prevent focus from moving.
clearListSelection();
mPopup.setInputMethodMode(PopupWindow.INPUT_METHOD_NEEDED);
- mPopup.update();
+ showDropDown();
return true;
} else {
// WARNING: Please read the comment where mListSelectionHidden
@@ -641,7 +673,7 @@ public class AutoCompleteTextView extends EditText implements Filter.FilterListe
// by ensuring it has focus and getting its window out
// of touch mode.
mDropDownList.requestFocusFromTouch();
- mPopup.update();
+ showDropDown();
switch (keyCode) {
// avoid passing the focus from the text view to the
@@ -1038,8 +1070,13 @@ public class AutoCompleteTextView extends EditText implements Filter.FilterListe
*/
public void showDropDown() {
int height = buildDropDown();
+
+ int widthSpec = 0;
+ int heightSpec = 0;
+
+ boolean noInputMethod = mPopup.getInputMethodMode() == PopupWindow.INPUT_METHOD_NOT_NEEDED;
+
if (mPopup.isShowing()) {
- int widthSpec;
if (mDropDownWidth == ViewGroup.LayoutParams.FILL_PARENT) {
// The call to PopupWindow's update method below can accept -1 for any
// value you do not want to update.
@@ -1049,20 +1086,51 @@ public class AutoCompleteTextView extends EditText implements Filter.FilterListe
} else {
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,
- mDropDownVerticalOffset, widthSpec, height);
+ mDropDownVerticalOffset, widthSpec, heightSpec);
} else {
if (mDropDownWidth == ViewGroup.LayoutParams.FILL_PARENT) {
- mPopup.setWindowLayoutMode(ViewGroup.LayoutParams.FILL_PARENT, 0);
+ widthSpec = ViewGroup.LayoutParams.FILL_PARENT;
} else {
- mPopup.setWindowLayoutMode(0, 0);
if (mDropDownWidth == ViewGroup.LayoutParams.WRAP_CONTENT) {
mPopup.setWidth(getDropDownAnchorView().getWidth());
} else {
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.setOutsideTouchable(true);
mPopup.setTouchInterceptor(new PopupTouchIntercepter());
@@ -1178,10 +1246,12 @@ public class AutoCompleteTextView extends EditText implements Filter.FilterListe
final int maxHeight = mPopup.getMaxAvailableHeight(
getDropDownAnchorView(), mDropDownVerticalOffset, ignoreBottomDecorations);
- final int measuredHeight = mDropDownList.measureHeightOfChildren(MeasureSpec.UNSPECIFIED,
- 0, ListView.NO_POSITION, maxHeight - otherHeights, 2) + otherHeights;
+ if (mDropDownAlwaysVisible) {
+ return maxHeight;
+ }
- return mDropDownAlwaysVisible ? maxHeight : measuredHeight;
+ return mDropDownList.measureHeightOfChildren(MeasureSpec.UNSPECIFIED,
+ 0, ListView.NO_POSITION, maxHeight - otherHeights, 2) + otherHeights;
}
private View getHintView(Context context) {
diff --git a/core/java/android/widget/PopupWindow.java b/core/java/android/widget/PopupWindow.java
index b188c31..bd6edfb 100644
--- a/core/java/android/widget/PopupWindow.java
+++ b/core/java/android/widget/PopupWindow.java
@@ -49,7 +49,7 @@ import java.lang.ref.WeakReference;
*/
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
* if it is focusable than it needs to work with the input method, else
* it doesn't.
@@ -57,16 +57,15 @@ public class PopupWindow {
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
* means that it will always be displayed so that the user can also operate
* the input method while it is shown.
*/
-
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
* 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.
@@ -1131,8 +1130,7 @@ public class PopupWindow {
return;
}
- WindowManager.LayoutParams p = (WindowManager.LayoutParams)
- mPopupView.getLayoutParams();
+ WindowManager.LayoutParams p = (WindowManager.LayoutParams) mPopupView.getLayoutParams();
boolean update = force;
@@ -1219,8 +1217,7 @@ public class PopupWindow {
registerForScrollChanged(anchor, xoff, yoff);
}
- WindowManager.LayoutParams p = (WindowManager.LayoutParams)
- mPopupView.getLayoutParams();
+ WindowManager.LayoutParams p = (WindowManager.LayoutParams) mPopupView.getLayoutParams();
if (updateDimension) {
if (width == -1) {
diff --git a/core/res/res/layout/search_bar.xml b/core/res/res/layout/search_bar.xml
index 54ab6de..13e66aa 100644
--- a/core/res/res/layout/search_bar.xml
+++ b/core/res/res/layout/search_bar.xml
@@ -76,6 +76,7 @@
android:ellipsize="end"
android:inputType="text|textAutoComplete"
android:dropDownWidth="fill_parent"
+ android:dropDownHeight="fill_parent"
android:dropDownAnchor="@id/search_plate"
android:dropDownVerticalOffset="-9dip"
android:popupBackground="@android:drawable/search_dropdown_background"
diff --git a/core/res/res/values/attrs.xml b/core/res/res/values/attrs.xml
index d778f5c..78567fc 100644
--- a/core/res/res/values/attrs.xml
+++ b/core/res/res/values/attrs.xml
@@ -1998,6 +1998,16 @@
<!-- The dropdown should fit the width of its anchor. -->
<enum name="wrap_content" value="-2" />
</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" />
</declare-styleable>
<declare-styleable name="PopupWindow">
diff --git a/core/res/res/values/public.xml b/core/res/res/values/public.xml
index 41db0fa..079baf7 100644
--- a/core/res/res/values/public.xml
+++ b/core/res/res/values/public.xml
@@ -1116,7 +1116,8 @@
<public type="attr" name="allowBackup" />
<public type="attr" name="glEsVersion" />
<public type="attr" name="queryAfterZeroResults" />
-
+ <public type="attr" name="dropDownHeight" />
+
<public-padding type="attr" name="donut_resource_pad" end="0x0101029f" />
<public-padding type="id" name="donut_resource_pad" end="0x01020040" />