添加自定义字体时无法解析方法getAssets()

时间:2017-04-11 15:26:08

标签: android assets

我想在我的适配器中添加自定义字体添加BaseAdapter的按钮(LetterBtn),但是我得到一个错误,getAssets()为“无法解析方法'getAssets()'”。

字体位于assets / fonts /文件夹中,它在我的其他Activity中工作正常。

@Override
public View getView(int position, View convertView, ViewGroup parent) {

    Button letterBtn;

    if (convertView == null) {
        letterBtn = (Button)letterInf.inflate(R.layout.letter, parent, false);
    } else {
        letterBtn = (Button)convertView;
    }

    letterBtn.setText(letters[position]);


Typeface font1 = Typeface.createFromAsset(getAssets(), 
"fonts/nexalight.otf");
letterBtn.setTypeface(font1);

    return letterBtn;

}

5 个答案:

答案 0 :(得分:7)

我认为您在Adapter课程中遇到了这个问题。更新您的Adapter课程,如下所示:

....................
................................

public class YourAdapter extends ......
{
    .........
    ..............

    Typeface font;

    public YourAdapter(Context context, ...........)
    {
        super(context, ..........);

        font = Typeface.createFromAsset(context.getAssets(), "fonts/nexalight.otf");
    }

    ...............  
    ........................

    @Override
    public View getView(int position, View convertView, ViewGroup parent) {


        if (convertView == null) {
            convertView = letterInf.inflate(R.layout.letter, parent, false);
        } 

        Button letterBtn = (Button ) convertView.findViewById(R.id.YOUR_BUTTON_ID);

        letterBtn.setText(letters[position]);
        letterBtn.setTypeface(font);

        return convertView;
    }

    ...................
    .........................
}

答案 1 :(得分:2)

使用

context.getAssets() 

在适配器中,它将起作用。

 Typeface mTypeface = Typeface.createFromAsset(context.getAssets(), "HelveticaNeueLTStd55 Roman.ttf");

答案 2 :(得分:0)

您可以从视图的上下文中获取资源。您应该考虑的另一个优化是将Typeface保存在适配器级别,这样您就可以重复使用它,而不是每次都从文件中加载它。

试试这个:

@Override
public View getView(int position, View convertView, ViewGroup parent) {

    Button letterBtn;

    if (convertView == null) {
        letterBtn = (Button)letterInf.inflate(R.layout.letter, parent, false);
    } else {
        letterBtn = (Button)convertView;
    }

    letterBtn.setText(letters[position]);

    Typeface font1 = Typeface.createFromAsset(letterBtn.getContext().getAssets(), "fonts/nexalight.otf");
    letterBtn.setTypeface(betuTipus1);

    return letterBtn;

}

答案 3 :(得分:0)

试试这个:

public class ButtonBold extends Button {
    public ButtonBold(Context context) {
        super(context);
        setTypeface();
    }

    public ButtonBold(Context context, AttributeSet attrs) {
        super(context, attrs);
        setTypeface();
    }

    public ButtonBold(Context context, AttributeSet attrs, int defStyleAttr) {
        super(context, attrs, defStyleAttr);
        setTypeface();
    }

    private void setTypeface() {
        if(!isInEditMode()) {
            setTypeface(Utils.BOLD_FACE);
        }
    }
}

Utils.BoldFace:

Typeface.createFromAsset(context.getAssets(), "OpenSans-LightItalic.ttf");

答案 4 :(得分:0)

只需在 getAssets()之前添加上下文

Typeface custom_font = Typeface.createFromAsset(context.getAssets(),  "fonts/font.ttf");
textView.setTypeface(custom_font);