How can I change the text color in dropdown menu of an AutoCompleteTextView
? Or how can I change the background color of a dropdown, by default dropdown\'s back
While it might be tricky to change the text color. It is easy to change the background color of the drop down menu
AutoCompleteTextView searchView = ...
searchView.setDropDownBackgroundDrawable(new ColorDrawable(context.getResources().getColor(R.color.colorId)));
It is actually not possible to direct change the color of the auto-complete textView by default. Instead you have to implement the custom adapter for such and inflating the view from adapter usually textView. See this question which will help u to solve your problem. So you can set the properties to the textview as you want.. e.g You must have the custom adapter like below
public class MyCustomBrandAdapter extends ArrayAdapter<Brand>{
List<Brand> Brandlist;
Context context;
private ArrayList<Brand> itemsAll;
private ArrayList<Brand> suggestions;
public MyCustomBrandAdapter(Context context, int textViewResourceId, List<Brand> Brandlist)
{
super(context, textViewResourceId, Brandlist);
this.Brandlist = Brandlist;
this.itemsAll = (ArrayList<Brand>) ((ArrayList<Brand>) Brandlist).clone();
this.suggestions = new ArrayList<Brand>();
this.context = context;
}
public View getView(int position, View convertView, ViewGroup parent)
{
View v = convertView;
if (v == null) {
LayoutInflater vi = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
v = vi.inflate(R.layout.listview, null);
}
Brand Brand = Brandlist.get(position);
if (Brand != null) {
TextView tt = (TextView) v.findViewById(R.id.txtName);
if (tt != null) {
tt.setText(Brandlist.get(position).toString());
} else {
System.out.println("Not getting textview..");
}
}
return v;
}
@Override
public Filter getFilter() {
return nameFilter;
}
Filter nameFilter = new Filter() {
public String convertResultToString(Object resultValue) {
String str = ((Brand)(resultValue)).getBrandDescription1();
return str;
}
@Override
protected FilterResults performFiltering(CharSequence constraint) {
if(constraint != null) {
suggestions.clear();
for (Brand brand : itemsAll) {
if(brand.getBrandDescription1().toLowerCase().startsWith(constraint.toString().toLowerCase())){
suggestions.add(brand);
}
}
FilterResults filterResults = new FilterResults();
filterResults.values = suggestions;
filterResults.count = suggestions.size();
return filterResults;
} else {
return new FilterResults();
}
}
@Override
protected void publishResults(CharSequence constraint, FilterResults results) {
ArrayList<Brand> filteredList = (ArrayList<Brand>) results.values;
List<Brand> getResult=new ArrayList<Brand>();
if(results != null && results.count > 0) {
clear();
for (Brand c : filteredList) {
getResult.add(c);
}
Iterator<Brand> brandIterator=getResult.iterator();
while(brandIterator.hasNext()){
Brand party=brandIterator.next();
add(party);
}
notifyDataSetChanged();
}
}
};
}
and in this the layout R.layout.listview xml is as follows
<?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:background="#ffffff" >
<LinearLayout
android:layout_width="fill_parent"
android:layout_height="wrap_content" >
<TextView
android:id="@+id/txtName"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="TextView"
android:textColor="#000000"
android:textSize="12dp"/>
</LinearLayout>
</LinearLayout>
Here in this xml. I have set background as white (android:background="#ffffff")
and I want text as black
(android:textColor="#000000")
and size as (android:textSize="12dp")
as I want it modified..
I think now it will get u clearly.
you need to create custom adapter class for this, then you can set textview to this like.
autoAdapter = new AutoAdapter(this, R.layout.autocompletelistview_test1,
edittext);
Here is autocompletelistview_test1
<?xml version="1.0" encoding="utf-8"?>
<LinearLayoutxmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="wrap_content">
<TextView xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="44dip"
android:gravity="center_vertical"
android:singleLine="true"
android:ellipsize="end"
android:layout_marginRight="12dip"
android:textStyle="bold"
android:textColor="#cc3333"
android:id="@+id/textview"
android:textSize="14sp" />
use following code to change background color of dropdown like
autocomplete.setDropDownBackgroundResource(R.color.autocompletet_background_color);
and you can set value like this in string.xml
<color name="autocompletet_background_color">#EFEFEF</color>
If you want to change text color of dropdown item then do like following.
in Adapter class.
@Override
public View getView(int position, View v, ViewGroup parent)
{
View mView = v ;
if(mView == null){
LayoutInflater vi = (LayoutInflater)appContext.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
mView = vi.inflate(id, null);
}
TextView text = (TextView) mView.findViewById(R.id.textview);
if(getItem(position) != null )
{
text.setTypeface(faceBold);
if(getItem(position).equals("check some condition if you want. "))
{
text.setTextColor(Color.parseColor("#999999"));
text.setText("set some text");
}
else
{
text.setTextColor(Color.parseColor("#cc3333"));
text.setText(getItem(position));
}
}
return mView;
}
Let me know if you have any question.
I solved this without inflating the layout using a custom adapter
Simply create a layout autocomplete_custom.xml
<?xml version="1.0" encoding="utf-8"?>
<TextView xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:id="@+id/any_id"
android:textColor="#ffffff"/>
Use it in your adapter
autocomplete.setAdapter(new ArrayAdapter<String>(this,
R.layout.autocomplete_custom, listContainingText););
Run. Bingo!