Хорошо, это немного сложно, но не слишком сложно.
- Расширение
SimpleAdapter
, создание настраиваемого адаптера. - Убедитесь, что вы внедрили
SpinnerAdapter
в этот новый адаптер.(если вы используете Eclipse, позвольте ему помочь вам, создавая нереализованные методы) - Реализация
SpinnerAdapter
заставит вас добавить объект xml ресурса с раскрывающимся списком.Добавьте его статически или определите установщик. - Внутри
public View getView(int position, View convertView, ViewGroup parent)
(где вы возвращаете пользовательский вид в Spinner), вызовите parent.getSelectedItem()
, чтобы увидеть, совпадает ли он с элементом на position
в вашем списке. - Если это так, установите шрифт побольше.Если нет, установите его в обычном режиме (не забудьте сделать это, так как счетчик будет перерабатывать представления, оставляя ваш больший шрифт на месте).
Чтобы использовать адаптер, вызовите что-то подобное из вашегоАктивность:
MyCustomSpinnerAdapter adapter = new MyCustomSpinnerAdapter(this, myListOfItems);
adapter.setDropDownViewResource(R.layout.my_dropdown_view_resource);
mySpinner.setAdapter(adapter);
Чтобы узнать, как Google это делает, взгляните в google codesearch здесь и выполните поиск по запросу "Android ArrayAdapter.java". Нажмите ядро / java / android /ссылка на виджет, и вы попадете в пакет со всеми различными адаптерами, интерфейсами и виджетами, которые вам нужны, чтобы понять остальное.
Удачи.
РЕДАКТИРОВАТЬ: Вотнепроверенный первый взлом на это в качестве примера:
import android.content.Context;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.Spinner;
import android.widget.SpinnerAdapter;
import android.widget.TextView;
import com.beget.consumer.R;
public class MyCustomSpinnerAdapter extends BaseAdapter implements SpinnerAdapter {
private String[] list;
private Context context;
public MyCustomSpinnerAdapter(Context context, String[] list) {
super();
this.list = list;
this.context = context;
// TODO Auto-generated constructor stub
}
@Override
public int getCount() {
return list.length;
}
@Override
public Object getItem(int position) {
//you need to add index safety here - make sure that position is a valid index
return list[position];
}
@Override
public long getItemId(int position) {
return position;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
ViewHolder holder;
if (convertView == null) {
convertView = context.inflate(R.layout.my_view_item, null);
holder = new ViewHolder();
holder.myView = (TextView) convertView.findViewById(R.id.beget_box_description);
convertView.setTag(holder);
} else {
holder = (ViewHolder) convertView.getTag();
}
if (list[position] == ((Spinner) parent).getSelectedItem()) {
holder.myView.setTextSize(25);
} else {
holder.myView.setTextSize(15);
}
holder.myView.setText(list[position]);
return convertView;
}
@Override
public View getDropDownView(int position, View convertView, ViewGroup parent) {
//change this if you want a different view for your dropdown list. It's the same as above, except you could
//inflate a different view if you wanted.
return getView(position, convertView, parent);
}
static class ViewHolder {
TextView myView;
}
}