Pratik
Pratik

Reputation: 30855

AutocompleteTextView suggestion list goes up

possible duplicates Android : autocompletetextview, suggestion list displays above the textview?

I am fully trying to display suggestion list overlapping on keyboard when suggestion list scroll by user but it always open up side.

here I am getting this way

enter image description here

here is my manifest file

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.sl"
    android:versionCode="1"
    android:versionName="1.0" >

    <uses-sdk android:minSdkVersion="8" />

    <application
        android:icon="@drawable/ic_launcher"
        android:label="@string/app_name" >
        <activity
            android:label="@string/app_name"
            android:name=".SuggestionListActivity" 
            android:windowSoftInputMode="adjustResize|adjustPan|stateHidden">
            <intent-filter >
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
    </application>
</manifest>

here is my main.xml file

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:orientation="vertical" android:padding="10dp">

    <TextView
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:text="@string/hello" 
        android:layout_margin="10dp"/>

    <TextView android:layout_margin="10dp"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:text="This is testing for the auto complete textview in this application to display suggestion list overlapping on keyboard." />

    <AutoCompleteTextView android:id="@+id/autocomplete"
            android:layout_width="fill_parent" android:layout_margin="5dp"
            android:layout_height="wrap_content" android:hint="Search"
            android:layout_marginLeft="5dp" android:dropDownHeight="300dp"
            android:inputType="textAutoComplete" android:singleLine="true"
            />

</LinearLayout>

what to do in this code to display the suggestion over keyboard when list was focus.

Upvotes: 24

Views: 21596

Answers (8)

Petter Hesselberg
Petter Hesselberg

Reputation: 5498

The trick is to ensure that the desired drop-down height is never larger than the available space below. My approach is to create a subclass that overrides showDropDown:

public class DownOnlyAutoCompleteTextView extends AppCompatAutoCompleteTextView {

    private final static int MINIMAL_HEIGHT = 50;

    public DownOnlyAutoCompleteTextView(Context context) {
        super(context);
    }

    public DownOnlyAutoCompleteTextView(Context context, AttributeSet attrs) {
        super(context, attrs);
    }

    public DownOnlyAutoCompleteTextView(Context context, AttributeSet attrs, int defStyleAttr) {
        super(context, attrs, defStyleAttr);
    }

    @Override
    public void showDropDown() {
        Rect displayFrame = new Rect();
        getWindowVisibleDisplayFrame(displayFrame);

        int[] locationOnScreen = new int[2];
        getLocationOnScreen(locationOnScreen);

        int bottom = locationOnScreen[1] + getHeight();
        int availableHeightBelow = displayFrame.bottom - bottom;
        if (availableHeightBelow >= MINIMAL_HEIGHT) {
            setDropDownHeight(availableHeightBelow);
        }

        super.showDropDown();
    }
}

Then use this in your layout, e.g.:

<your.package.DownOnlyAutoCompleteTextView
    android:id="@+id/auto_complete_text_view"
    android:layout_margin="12dp"
    android:hint="AutoComplete"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    tools:ignore="HardcodedText" />

Adjust MINIMAL_HEIGHT to fit your requirements -- if there's no or very little space below, it's probably better not to force the issue.

EDIT

As mentioned in the comments, passing a negative number to setDropDownHeight will trigger an exception in some Android versions. As long as you define a MINIMAL_HEIGHT greater than zero, that should not be a problem.

Upvotes: 7

SlowLearnah
SlowLearnah

Reputation: 80

I have found if you are using a nested scroll view, it is more prone to open the view above or below as it sees fit where as when you are using a regular scroll view it opens below.

Upvotes: 0

Ankit Saini
Ankit Saini

Reputation: 372

use: android:dropDownHeight="wrap_content" in AutoCompleteTextView

Upvotes: 1

LOG_TAG
LOG_TAG

Reputation: 20569

Just adding the android:dropDownHeight="100dp" to the AutoCompleteTextView tag in your layout file will be the best solution I guess! it will simply control the height of drop down hight and allow us to scroll!

<AutoCompleteTextView
        android:id="@+id/acetxt_assignclient"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"   
        android:dropDownHeight="100dp">
</AutoCompleteTextView>

Upvotes: 0

bshears
bshears

Reputation: 1139

Here's my solution

private final static int DELAY_MS = 500;
autoCompletionTextView.setOnTouchListener(new View.OnTouchListener() {
        @Override
        public boolean onTouch(View v, MotionEvent event) {
            autoCompletionTextView.requestFocus();
            new Handler().postDelayed(() -> autoCompletionTextView.showDropDown(), DELAY_MS);
            return false;
        }
    });

After keyboard shows up suggestion list is listed above yout AutoCompletionTextView.

Upvotes: 2

arpan
arpan

Reputation: 1

Set Full Layout containing Autocompletetextview inside Scrollview

This will solve your problem!

Upvotes: -2

Gautam
Gautam

Reputation: 7958

You can either adjust the layout so that there is more space below the AutoCompleteTextView

or

you can change the dropdown height android:dropDownHeight and set some high value, this would work when its inside a scrollView and the AutoCompleteTextView is near the top.

To display the list of options on focus do something like this

autoCompleteTextView.setOnFocusChangeListener(new OnFocusChangeListener() {
    public void onFocusChange(View v, boolean hasFocus) {
        if(hasFocus) {
            autoCompleteTextView.showDropDown();
        }
    }
});

This would display a list of options when the user focuses on the AutoCompleteTextView

Upvotes: 7

Mike T
Mike T

Reputation: 4787

I've had this problem before. For me, there was more screen space above the AutocompleteTextView than below (testing on a "normal" device), so the list opened upwards. I adjusted my layout slightly so that there was more space below the AutocompleteTextView and it started opening downwards. That's what fixed it for me.

Upvotes: 13

Related Questions