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
For anyone that wants to use the original provided android spinner.
public class main extends Activity {
private Spinner _spinnerMethod;
String[] _methodStrings = new String[]{"Item A", "Item B:False","Item C:False","Last Item"};
@Override
public void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
CreateSpinner();
}
public void CreateSpinner()
{
_spinnerMethod = (Spinner) findViewById(R.id.spinner_edit_death_method);
final ArrayList reasonArray = new ArrayList();
for(int i = 0; i <_methodStrings.length;i ++)
{
reasonArray.add(_methodStrings[i]);
}
ArrayAdapter methodAdapter = new ArrayAdapter(this, android.R.layout.simple_spinner_item, reasonArray)
{
@Override
public boolean isEnabled(int position) {
String val = reasonArray.get(position);
// In my case added :False to the end of strings I wanted effected for some call
boolean isFalse = val.contains(":False");
return !isFalse;
}
@Override
public boolean areAllItemsEnabled() {
return false;
}
@Override
public View getDropDownView(int position, View convertView,android.view.ViewGroup parent){
View v = convertView;
if (v == null) {
Context mContext = this.getContext();
LayoutInflater vi = (LayoutInflater) mContext.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
// Androids orginal spinner view item
v = vi.inflate(android.R.layout.simple_spinner_dropdown_item, null);
}
// The text view of the spinner list view
TextView tv = (TextView) v.findViewById(android.R.id.text1);
String val = reasonArray.get(position);
// remove the extra text here
tv.setText(val.replace(":False", ""));
boolean disabled = !isEnabled(position);
if(disabled){tv.setTextColor(Color.GRAY);}
else{tv.setTextColor(Color.BLACK);}
return v;
}
};
methodAdapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
_spinnerMethod.setAdapter(methodAdapter);
}
}