2

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

4

2 に答える 2

8

アダプターを正しく初期化していない。そのバージョンArrayAdapterは2つのintを取ります。1つは行のレイアウトファイルを指し、intはTextViewそのレイアウトファイルのウィジェットのIDを表します。このアダプタは空になります。コードは次のようになります。

String[] items = getResources().getStringArray(R.array.sorting_items);
SpinnerSortAdapter adapter = new SpinnerSortAdapter(getActivity(), android.R.layout.simple_spinner_item, items);

また、アダプタは次のように変更されます。

 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);
    }
}
于 2012-10-21T18:39:46.013 に答える
2

はるかに簡単で高速なルートは、アダプター自体ではなく、アダプターに渡すレイアウトをカスタマイズすることです。

ArrayAdapter<CharSequence> adapter = ArrayAdapter.createFromResource(getActivity(), R.layout.spinner_item, R.array.sorting_items);
adapter.setDropDownViewResource(R.layout.spinner_dropdown_item);

spinner_dropdown_item.xmlこれを次のように保存します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"/>

(下部にtextSize属性をコピーsimple_spinner_dropdown_item.xmlして追加しました。レイアウトでも同じようにする必要がありsimple_spinner_itemます。)

実行時に属性を変更しないため、このアプローチはより高速です。XMLは前処理されます。カスタムアダプタは、電話をかけるたびに書体とサイズを変更しますgetView()getDropDownView()...

于 2012-10-21T18:40:58.413 に答える