Android установка шрифта в текстовом представлении

1

Привет, Я пытаюсь изменить стиль шрифта TextView. Я знаю, как изменить его, я сделал это, прежде чем использовать следующий код.

public class Main_Activity extends ListActivity {
    Typeface myNewFace = Typeface.createFromAsset(getAssets(),
            "fonts/bediz__.ttf");
    private CustomListAdapter adap;

    public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);
    adap = new CustomListAdapter(this);
    setListAdapter(adap);
}
    public static class CustomListAdapter extends BaseAdapter implements
        Filterable {
           public View getView(final int position, View convertView,
            ViewGroup parent) {
        textView.setText(prayers[position]);
        holder.textLine.setTypeface(myNewFace);
           }
}

Некоторые из кода, которые я пропустил, потому что нет необходимости, кстати, когда я myNewFace к myNewFace в getView() он просит меня сделать его static, когда я делаю его static как это

static Typeface myNewFace = Typeface.createFromAsset(getAssets(),"fonts/bediz__.ttf");

Это дает мне следующую ошибку

Cannot make a static reference to the non-static method getAssets() from the type ContextWrapper

Я не знаю, что делать, я делал эту работу несколько раз раньше, но теперь я не знаю, почему она не работает.

Теги:

2 ответа

2
Лучший ответ

вы должны просто сделать это

static Typeface myNewFace = Typeface.createFromAsset(context.getAssets(),"fonts/bediz__.ttf"); 

где контекст должен быть контекстом класса, который вызывает вызов адаптера.

  • 3
    Поскольку это статический инициализатор, нет context для работы с ним.
  • 1
    Большое спасибо, это сработало. Я приму ваш ответ через 7 минут
Показать ещё 1 комментарий
1

Это потому, что вы объявили свой inner class static; делая ваш inner class верхним уровнем вложенного класса и больше не является nested class; поэтому вы больше не можете получить какой-либо non-static member outer class не пройдя сначала ссылку на экземпляр объекта.

Для non-static inner class всегда ссылается (скрытая) ссылка на внешний объект, когда создается object для inner class; поэтому предоставляет доступ ко всем членам внешнего object/class. Для static inner class эта ссылка не передается.

Что касается вашего примера, вы можете использовать ссылку на внешний объект, который вы явно передаете при создании нового объекта CustomListAdapter: " adap = new CustomListAdapter(this); ", но лучшим решением, вероятно, является удаление этого статического ключевого слова из определение внутреннего класса. Вам также не нужно будет передавать ссылку на внешний объект.

  • 0
    Большое спасибо, полезные детали.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню