Android: используйте собственный шрифт с пользовательским адаптером с использованием SQLite

Как я могу ввести текст с помощью пользовательского шрифта, поместить его в SQLite, а затем отобразить в текстовом виде?

Я могу установить шрифт для EditText и TextView, но я хочу получить шрифт из EditText и поместить его в TextView (в моем случае текст в ListView)

Вы можете считать мое приложение приложением для чата с пользовательским шрифтом.

Спасибо


person TomNg    schedule 12.06.2014    source источник
comment
работа с пользовательскими шрифтами - это боль в Android. Я сейчас тоже этим занимаюсь, возможно, вы захотите попробовать эту библиотеку, чтобы упростить задачу github.com/chrisjenx/каллиграфия   -  person Illegal Argument    schedule 12.06.2014


Ответы (3)


Хорошо, во-первых, шрифт не имеет ничего общего с базой данных. Итак, я собираюсь помочь вам здесь, указав вам правильное направление:

Вот руководство по сохранению в базе данных: http://www.vogella.com/tutorials/AndroidSQLite/article.html (прочитайте, это хорошо).

И кроме того, как только вы хотите отобразить свои данные в TextView, ТОГДА вы должны установить шрифт для указанного TextView: Android - Использование пользовательского шрифта

person Christopher Francisco    schedule 12.06.2014
comment
Спасибо чувак! Я могу сделать и то, и другое выше, однако мне нужно отобразить список с пользовательским шрифтом (и каждый элемент может иметь любой шрифт, как я выбрал ранее) - person TomNg; 12.06.2014

Из того, что вы описываете, я представляю себе ListView, который представляет поток/журнал чата. Каждый элемент в ListView (в данном случае TextView) представляет собой одно сообщение. Каждое сообщение в ветке чата может иметь собственный шрифт. Вы хотите сохранить тип шрифта сообщения в базе данных. По сути, вы хотите изменить шрифт TextView с помощью специального адаптера.

Для этого я бы создал объект Message. Этот объект Message будет иметь поля (то есть переменные), такие как MessageContent, MessageFont и т. д. Затем вы можете сохранить этот объект в своей базе данных. После извлечения из базы данных вы можете использовать собственный адаптер для назначения шрифта вашему TextView.

public class MessageCursorAdapter extends CursorAdapter {

private Cursor messageCursor;
private Context context;
private final LayoutInflater inflater;

public MessageCursorAdapter(Context context, Cursor cursor) {
    super(context, cursor);
    this.inflater = LayoutInflater.from(context);
    this.context = context;
}

@Override
public void bindView(View view, Context context, Cursor cursor) {

    TextView messageTextView = (TextView) view.findViewById(R.id.message_item_text);

    String messageFont = cursor.getString(cursor.getColumnIndex("name_of_database_column"));
    if (messageFont.equals("Epimodem")) {
        Typeface face = Typeface.createFromAsset(getAssets(), "fonts/epimodem.ttf");
    messageTextView.setTypeface(face);
}

@Override
public View newView(Context context, Cursor cursor, ViewGroup parent) {
    final View view = this.inflater.inflate(R.layout.message_item, parent, false);
    return view;
}
}
person Blake Mumford    schedule 12.06.2014
comment
Спасибо, это именно то, что я хочу сделать. Можете ли вы показать мне рабочий пример использования этого адаптера? Я новичок в этом. - person TomNg; 12.06.2014
comment
@coderkisser Я уже включил пример пользовательского адаптера курсора. Что еще вам непонятно? - person Blake Mumford; 12.06.2014
comment
Ваш адаптер хорош, но MessageCursorAdapter (контекстный контекст, курсор курсора) устарел, его следует изменить на MessageCursorAdapter (контекстный контекст, курсор курсора, ложь) - person TomNg; 16.06.2014

В любом классе адаптера, который вы расширяете для заполнения данных, вы получаете функцию с именем getView (позиция int, View convertView, ViewGroup parent). То, что вы хотите, может быть сделано здесь.

Что вам нужно сделать, так это создать класс, который расширяет адаптер, а затем раздуть представление, которое вы собираетесь вернуть и хотите отобразить, а затем в TextView установите TypeFaces.

 @Override
  public View getView(int position, View convertView, ViewGroup parent) {
    LayoutInflater inflater = (LayoutInflater) context
        .getSystemService(Context.LAYOUT_INFLATER_SERVICE);
    View rowView = inflater.inflate(R.layout.rowlayout, parent, false);
    TextView textView = (TextView) rowView.findViewById(R.id.label);
    ImageView imageView = (ImageView) rowView.findViewById(R.id.icon);
    textView.setText(values[position]);

    // Set the TypeFace Here
    Typeface font = Typeface.createFromAsset(getAssets(), "Chantelli_Antiqua.ttf");
    textView.setTypeface(font);

     return rowView;
  }
person Quamber Ali    schedule 12.06.2014
comment
Спасибо за ваш комментарий. Но у меня нет идентификатора textView, у меня просто есть ListView в моем макете, как я могу установить TypeFace для textView внутри него. Другими словами, как я могу найти тексты в моем списке? - person TomNg; 12.06.2014
comment
Похоже, вы действительно не знаете о списках, но вам нужно создать для этого пользовательский отдельный макет XML и добавить идентификатор в свои TextViews. вы можете проверить это руководство androidhive.info/ 2012/02/ - person Quamber Ali; 12.06.2014
comment
честно говоря, я не понял, как использовать ваш getView(), у меня есть много разных текстовых представлений в ListView, и мне нужно найти способ идентифицировать каждое из них. - person TomNg; 14.06.2014