2

我正在尝试更改通过 ArrayAdapter 创建的 AutocompleteTextView 建议的字体

Wadapter = new ArrayAdapter<String>(this, android.R.layout.simple_dropdown_item_1line);

我查找文件 simple_dropdown_item_1line.xml 并将其传输到我的布局文件夹。这是它的内容:

<TextView xmlns:android="http://schemas.android.com/apk/res/android" 
android:id="@android:id/text1"
style="?android:attr/dropDownItemStyle"
android:textAppearance="?android:attr/textAppearanceLargePopupMenu"
android:singleLine="true"
android:layout_width="match_parent"
android:layout_height="?android:attr/listPreferredItemHeight"
android:ellipsize="marquee" />

这使得更改建议变得容易,例如,建议的大小。但是不能从 xml 更改字体类型(基本字体选项除外),这需要从代码中完成。我尝试使用这行代码:

TextView scroll= (TextView) findViewById(android.R.id.text1);
Typeface type = Typeface.createFromAsset(getAssets(),"Typewriter.ttf");
scroll.setTypeface(type);

但最后一行给了我 NullPointerException。有人知道如何进行吗?

4

2 回答 2

1

您可以制作一个自定义适配器,并在那里为建议分配一个新字体。

public class CustomAdapter extends ArrayAdapter<String> {

    private Context context;
    private int layout;
    private final Typeface tf;

    public AddContactAdapter(Context context, int layout, ArrayList<String> data, String FONT) {
        super(context, layout, contacts);
        this.context = context;
        this.layout = layout;
        tf = Typeface.createFromAsset(context.getAssets(), FONT);
    }

    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
        LayoutInflater inflater = (LayoutInflater) context
                .getSystemService(Context.LAYOUT_INFLATER_SERVICE);
        View rowView = inflater.inflate(layout, parent, false);

        TextView suggestion = (TextView) rowView.findViewById(R.id.text1);
        suggestion.setText(getItem(position).toString());
        suggestion.setTypeface(tf);

        return rowView;
    }

然后在您的活动中分配您的自定义适配器,如下所示:

CustomAdapter adapter = new CustomAdapter(this, android.R.layout.simple_dropdown_item_1line, data, "path to font");
于 2014-03-01T20:11:38.723 回答
0

仔细检查Typewriter.ttf字体的正确文件名,以及它是否已添加到assets文件夹中。

编辑

您也可以尝试TextView id

android:id="@+id/text1"

并获得视图

TextView scroll = (TextView) findViewById(R.id.text1);
于 2013-10-05T15:06:53.297 回答