Невозможно разрешить метод getAssets() при добавлении пользовательского шрифта

Я хочу добавить пользовательский шрифт к кнопке (LetterBtn) в моем адаптере, который расширяет BaseAdapter, но я получаю сообщение об ошибке с getAssets() как «не удается разрешить метод getAssets()».

Шрифт находится в папке assets/fonts/, он отлично работает в другой моей активности.

@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;

}

person prezli    schedule 11.04.2017    source источник
comment
Вы используете этот код во фрагменте?   -  person Parth Sane    schedule 11.04.2017
comment
Не могли бы вы опубликовать свой полный класс адаптера?   -  person Ferdous Ahamed    schedule 11.04.2017


Ответы (5)


Я думаю, вы столкнулись с этой проблемой в своем классе 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;
    }

    ...................
    .........................
}
person Ferdous Ahamed    schedule 11.04.2017

использовать

context.getAssets() 

в адаптере он будет работать.

 Typeface mTypeface = Typeface.createFromAsset(context.getAssets(), "HelveticaNeueLTStd55 Roman.ttf");
person Lovekush Vishwakarma    schedule 11.04.2017

Вы можете получить ресурсы из контекста вашего представления. Еще одна оптимизация, которую вы должны рассмотреть, - это сохранить 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;

}
person Doron Yakovlev-Golani    schedule 11.04.2017

Попробуй это:

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

Утилиты.BoldFace:

Typeface.createFromAsset(context.getAssets(), "OpenSans-LightItalic.ttf");
person ins1der12111991    schedule 11.04.2017
comment
И попробуй другой шрифт, может проблема в нем. - person ins1der12111991; 11.04.2017

Просто добавьте context перед getAssets(),

Typeface custom_font = Typeface.createFromAsset(context.getAssets(),  "fonts/font.ttf");
textView.setTypeface(custom_font);
person abir-cse    schedule 28.07.2019