2

我只想更改微调器文本的字体和大小。

我做了一些初步的尝试。没有什么崩溃,但我的微调器是空白的。(我还没有实现自定义字体,我只是想让微调器先工作。

在代码中:

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());

适配器:

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需要两个 int,一个指向行的布局文件,一个 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.xmlres/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"/>

simple_spinner_dropdown_item.xml(我只是在底部复制并添加了 textSize 属性。你应该对simple_spinner_item布局做同样的事情。)

这种方法更快,因为您不会在运行时更改任何属性。XML 是经过预处理的。getView()虽然自定义适配器在您每次调用或getDropDownView()...时都会更改字体和大小

于 2012-10-21T18:40:58.413 回答