android change text color of items in spinner

后端 未结 2 1144
傲寒
傲寒 2020-11-29 08:32

I have a spinner where in certain conditions some options should not be selectable. I have the code to make items not selectable but it does not grey out text color to speci

2条回答
  •  一整个雨季
    2020-11-29 09:11

    I figured out that to make this work you have to override the getDropDownView when setting up the ArrayAdapter in the main activity.

    public class main extends Activity {  
         @Override 
         public void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);   
            setContentView(R.layout.main);  
    
            PatchedSpinner pSpinner = (PatchedSpinner) findViewById(R.id.spinner2); 
            ArrayList testarray = new ArrayList();
            testarray.add("item0");
            testarray.add("item1");
            testarray.add("item2");
            testarray.add("item3");
            ArrayAdapter spinnerAdapter = new ArrayAdapter(this,android.R.layout.simple_spinner_dropdown_item, testarray) {
    
               @Override      
               public boolean isEnabled(int position) {
                   return position != 1;                             
               }
    
               @Override                
               public boolean areAllItemsEnabled() {
                   return false;
               }
    
               @Override
               public View getDropDownView(int position, View convertView, ViewGroup parent){
                   View v = convertView;
                   if (v == null) {
                       Context mContext = this.getContext();
                       LayoutInflater vi = (LayoutInflater) mContext.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
                       v = vi.inflate(R.layout.row, null);
                   }
    
                   TextView tv = (TextView) v.findViewById(R.id.spinnerTarget);
                   tv.setText(testarray.get(position));
    
                   switch (position) {
                       case 0:
                           tv.setTextColor(Color.RED);  
                           break; 
                       case 1:
                           tv.setTextColor(Color.BLUE);
                           break;
                       default:
                           tv.setTextColor(Color.BLACK);
                           break;
                   }
                   return v;  
               }              
            };
    
            pSpinner.setAdapter(spinnerAdapter); 
    } 
    

    The layout that is being inflated is a custom layout called row.xml. it is used to set the display for the dropdown view.

    
    
    

提交回复
热议问题