Reputation: 15734
I want to do nothing more than change the font Typeface and size of my spinner text.
I have made some initial attempts. Nothing is crashing, but my spinner is blank. (I also have yet to implement the custom Typeface, I am just trying to get the spinner to work first.
In code:
protected SpinnerSortAdapter sAdapter;
protected Spinner sort;
protected String[] strings;
sort = (Spinner) getActivity().findViewById(R.id.spinner2);
strings = getActivity().getResources().getStringArray(R.array.sorting_items);
SpinnerSortAdapter sAdapter = new SpinnerSortAdapter(getActivity(),
android.R.layout.simple_spinner_item, strings);
sAdapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
sort.setAdapter(sAdapter);
sort.setOnItemSelectedListener(new MyOnItemSelectedListener());
Adapter:
public class SpinnerSortAdapter extends ArrayAdapter<String> {
public SpinnerSortAdapter(Context context, int textViewResourceId,
String[] strings) {
super(context, textViewResourceId, strings);
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
View view = super.getView(position, convertView, parent);
if (view instanceof TextView) {
((TextView) view).setTextSize(5);
}
return view;
}
public View getDropDownView(int position, View convertView, ViewGroup parent) {
View row = super.getView(position, convertView, parent);
return (row);
}
}enter code here
Upvotes: 2
Views: 4763
Reputation: 86948
A much easier and faster route is to customize the layouts that you pass to your adapter rather than the adapter itself:
ArrayAdapter<CharSequence> adapter = ArrayAdapter.createFromResource(getActivity(), R.layout.spinner_item, R.array.sorting_items);
adapter.setDropDownViewResource(R.layout.spinner_dropdown_item);
Save this as spinner_dropdown_item.xml
in res/layout
:
<CheckedTextView xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@android:id/text1"
style="?android:attr/spinnerDropDownItemStyle"
android:singleLine="true"
android:layout_width="fill_parent"
android:layout_height="?android:attr/listPreferredItemHeight"
android:ellipsize="marquee"
android:textSize="15sp"/>
(I just copied simple_spinner_dropdown_item.xml
and added the textSize attribute at the bottom. You should do the same with simple_spinner_item
layout.)
This approach is faster because you are not changing any attributes at runtime. The XML is pre-processed. While the custom adapter changes the typeface and size everytime you call getView()
or getDropDownView()
...
Upvotes: 2
Reputation: 87064
You're not initializing the adapter correctly. Your version of ArrayAdapter
that takes two ints, one pointing to a layout file for the row and an int representing the id of a TextView
widget from that layout file. This adapter will be empty. Your code should be like this:
String[] items = getResources().getStringArray(R.array.sorting_items);
SpinnerSortAdapter adapter = new SpinnerSortAdapter(getActivity(), android.R.layout.simple_spinner_item, items);
Also the adapter would be changed to:
public class SpinnerSortAdapter extends ArrayAdapter<String> {
public SpinnerSortAdapter(Context context, int textViewResourceId,
String[] strings) {
super(context, textViewResourceId, strings);
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
View view = super.getView(position, convertView, parent);
if (view instanceof TextView) {
((TextView) view).setTextSize(5);
}
return view;
}
public View getDropDownView(int position, View convertView, ViewGroup parent) {
View row = super.getView(position, convertView, parent);
return (row);
}
}
Upvotes: 8