Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Android: Make AutoCompleteTextView dropdown wrap to 2 lines or more

I am writing an Android app that uses an AutoCompleteTextView just like the API example. The problem is that my text is too long and needs to wrap when the dropdown occurs. I have a custom list_item.xml, but only one line of text displays. The list_item.xml layout wraps to 2 lines if used with a spinner, but not with the AutoCompleteTextView.

main.java

public class main extends Activity {
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);

        AutoCompleteTextView textView = (AutoCompleteTextView) findViewById(R.id.autocomplete_country);
        ArrayAdapter<String> adapter  = new ArrayAdapter<String>(this, R.layout.list_item, COUNTRIES);
        textView.setAdapter(adapter);
    }  

        static final String[] COUNTRIES = new String[] {
            "This is the first line that is too long and it needs to wrap content",
          "Albania", "Algeria", "American Samoa", "Andorra",
          "This is a second line that also needs to wrap its content",
              "Bahrain", "Bangladesh", "Barbados", "Belarus", "Belgium"
        };
}

main.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:orientation="horizontal"
    android:layout_width="fill_parent" 
    android:layout_height="wrap_content"
    android:padding="5dp">
    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Country" />

    <AutoCompleteTextView android:id="@+id/autocomplete_country"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:layout_marginLeft="5dp"/>        
</LinearLayout>

list_item.xml

<?xml version="1.0" encoding="utf-8"?>
<TextView xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:padding="10dp"
    android:textSize="16sp"
    android:textColor="#000"    
    >
</TextView>
like image 271
miannelle Avatar asked Feb 18 '10 18:02

miannelle


2 Answers

Wrap the TextView in a layout and use that for your ArrayAdapter

<?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" >

    <TextView 
        android:id="@+id/item"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:padding="10dp"
        android:textSize="16sp"
        android:textColor="#000"    
        />

</LinearLayout>

And the new calls for the ArrayAdapter:

    AutoCompleteTextView textView = (AutoCompleteTextView) findViewById(R.id.autocomplete_country);
    ArrayAdapter<String> adapter  = new ArrayAdapter<String>(getActivity(), R.layout.list_item, R.id.item, COUNTRIES);
    textView.setAdapter(adapter);
like image 122
Luke Wallace Avatar answered Oct 24 '22 09:10

Luke Wallace


easy way :
adapter = new ArrayAdapter(getApplicationContext(), android.R.layout.two_line_list_item,android.R.id.text1,....);

android.R.layout.two_line_list_item this is easy change.

like image 39
Amol Dale Avatar answered Oct 24 '22 07:10

Amol Dale