How to change the text color of dropdown in an AutoCompleteTextView?

前端 未结 4 1853
难免孤独
难免孤独 2021-01-05 12:32

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

相关标签:
4条回答
  • 2021-01-05 13:01

    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)));
    
    0 讨论(0)
  • 2021-01-05 13:03

    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.

    0 讨论(0)
  • 2021-01-05 13:14

    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.

    0 讨论(0)
  • 2021-01-05 13:18

    I solved this without inflating the layout using a custom adapter

    1. 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"/>
      
    2. Use it in your adapter

      autocomplete.setAdapter(new ArrayAdapter<String>(this,
              R.layout.autocomplete_custom, listContainingText););
      

    Run. Bingo!

    0 讨论(0)
提交回复
热议问题