Как использовать значки и символы из "Шрифт Awesome" для собственного приложения для Android

Я пытаюсь использовать Font Awesome в своем приложении, мне удалось интегрировать шрифт с помощью Typeface.createFromAsset(), но я также хочу использовать значки, предоставленные этим шрифтом, но до сих пор я не мог этого сделать.

Этот конкретный шрифт содержит значки внутри области частного использования Юникода (PUA) для таких вещей, как средства управления медиаплеером, доступ к файловой системе, стрелки и т.д.

Кто-нибудь использовал шрифты, содержащие значки и символы на Android, это вообще возможно?

Ответ 1

Шрифт Awesome, похоже, отлично работает для меня в приложении для Android. Я сделал следующее:

  • Скопировано fontawesome-webfont.ttf в папку моих справок
  • Найдено объекты символов для значков, которые я хотел, используя эту страницу: http://fortawesome.github.io/Font-Awesome/cheatsheet/
  • Создал запись в файле strings.xml для каждого значка. Например, для сердца:

    <string name="icon_heart">&#xf004;</string>
    
  • Ссылка на указанную запись в представлении моего макета xml:

     <Button
         android:id="@+id/like"
         style="?android:attr/buttonStyleSmall"
         ...
         android:text="@string/icon_heart" />
    
  • Загрузите шрифт в мой метод onCreate и установите его для соответствующих представлений:

    Typeface font = Typeface.createFromAsset( getAssets(), "fontawesome-webfont.ttf" );
    ...
    Button button = (Button)findViewById( R.id.like );
    button.setTypeface(font);
    

Ответ 2

Попробуйте IcoMoon: http://icomoon.io

  • Выберите нужные значки.
  • Назначение символов для каждого значка
  • Скачать шрифт

Скажем, вы выбрали значок воспроизведения, присвоили ему букву "P" и загрузили файл icomoon.ttf в свою папку с ресурсами. Вот как вы показываете значок:

XML:

<TextView
  android:layout_width="wrap_content"
  android:layout_height="wrap_content"
  android:textSize="48sp"
  android:text="P" />

Java:

Typeface typeface = Typeface.createFromAsset(getAssets(), "icomoon.ttf");
textView.setTypeface(typeface);

Я поговорил о создании замечательных приложений для Android, в том числе объяснения по использованию шрифтов значков, а также добавление градиентов, чтобы сделать иконки еще красивее: http://www.sqisland.com/talks/beautiful-android

Объяснение шрифта значка начинается со слайда 34: http://www.sqisland.com/talks/beautiful-android/#34

Ответ 3

Возможно, слишком поздно, но у меня была такая же потребность, поэтому я опубликовал это https://github.com/liltof/font-awsome-for-android Это версия для Android, версия для Android, удобная для использования, как это сделал Кейт Корвин.

Надеюсь, что это поможет другим.

Ответ 4

Как и выше, это отличный пример и прекрасно работает:

Typeface font = Typeface.createFromAsset(getAssets(), "fontawesome-webfont.ttf" );

Button button = (Button)findViewById( R.id.like );
button.setTypeface(font);

НО! > это будет работать, если строка внутри кнопки, которую вы установили из xml:

<string name="icon_heart">&#xf004;</string>
button.setText(getString(R.string.icon_heart));

Если вам нужно добавить его динамически, можете использовать это:

String iconHeart = "&#xf004;";
String valHexStr = iconHeart.replace("&#x", "").replace(";", "");
long valLong = Long.parseLong(valHexStr,16);
button.setText((char) valLong + "");

Ответ 5

Существует небольшая и полезная библиотека предназначенная для этих целей:

dependencies {
    compile 'com.shamanland:fonticon:0.1.9'
}

Получить демо на Google Play.

enter image description here

Вы можете легко добавить значок на основе шрифта в свой макет:

<com.shamanland.fonticon.FontIconView
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="@string/ic_android"
    android:textSize="@dimen/icon_size"
    android:textColor="@color/icon_color"
    />

Вы можете раздувать значок шрифта как Drawable из xml:

<?xml version="1.0" encoding="utf-8"?>
<font-icon
    xmlns:android="http://schemas.android.com/apk/res-auto"
    android:text="@string/ic_android"
    android:textSize="@dimen/big_icon_size"
    android:textColor="@color/green_170"
    />

Код Java:

Drawable icon = FontIconDrawable.inflate(getResources(), R.xml.ic_android);

Ссылки:

Ответ 6

Если вы хотите программный setText без добавления строки в string.xml

см. здесь шестнадцатеричный код:

http://fortawesome.github.io/Font-Awesome/cheatsheet/

заменить & # xf066; до 0xf066

 Typeface typeface = Typeface.createFromAsset(getAssets(), "fontawesome-webfont.ttf");
    textView.setTypeface(typeface);
    textView.setText(new String(new char[]{0xf006 }));

Ответ 7

Одна из библиотек, которые я использую для Font Awesome, такова:

https://github.com/Bearded-Hen/Android-Bootstrap

В частности,

https://github.com/Bearded-Hen/Android-Bootstrap/wiki/Font-Awesome-Text

Документация легко понять.

Сначала добавьте необходимые зависимости в build.gradle:

dependencies {
    compile 'com.beardedhen:androidbootstrap:1.2.3'
}

Во-вторых, вы можете добавить это в свой XML:

<com.beardedhen.androidbootstrap.FontAwesomeText
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    fontawesometext:fa_icon="fa-github"
    android:layout_margin="10dp" 
    android:textSize="32sp"
/>

но убедитесь, что вы добавили это в свой корневой макет, если хотите использовать пример выше кода:

    xmlns:fontawesometext="http://schemas.android.com/apk/res-auto"

Ответ 8

Я сделал этот вспомогательный класс в С# (Xamarin), чтобы программно установить свойство text. Это хорошо работает для меня:

internal static class FontAwesomeManager
{
    private static readonly Typeface AwesomeFont = Typeface.CreateFromAsset(App.Application.Context.Assets, "FontAwesome.ttf");

    private static readonly Dictionary<FontAwesomeIcon, string> IconMap = new Dictionary<FontAwesomeIcon, string>
    {
        {FontAwesomeIcon.Bars, "\uf0c9"},
        {FontAwesomeIcon.Calendar, "\uf073"},
        {FontAwesomeIcon.Child, "\uf1ae"},
        {FontAwesomeIcon.Cog, "\uf013"},
        {FontAwesomeIcon.Eye, "\uf06e"},
        {FontAwesomeIcon.Filter, "\uf0b0"},
        {FontAwesomeIcon.Link, "\uf0c1"},
        {FontAwesomeIcon.ListOrderedList, "\uf0cb"},
        {FontAwesomeIcon.PencilSquareOutline, "\uf044"},
        {FontAwesomeIcon.Picture, "\uf03e"},
        {FontAwesomeIcon.PlayCircleOutline, "\uf01d"},
        {FontAwesomeIcon.SignOut, "\uf08b"},
        {FontAwesomeIcon.Sliders, "\uf1de"}
    };

    public static void Awesomify(this TextView view, FontAwesomeIcon icon)
    {
        var iconString = IconMap[icon];

        view.Text = iconString;
        view.SetTypeface(AwesomeFont, TypefaceStyle.Normal);
    }
}

enum FontAwesomeIcon
{
    Bars,
    Calendar,
    Child,
    Cog,
    Eye,
    Filter,
    Link,
    ListOrderedList,
    PencilSquareOutline,
    Picture,
    PlayCircleOutline,
    SignOut,
    Sliders
}

Должно быть достаточно легко конвертировать в Java, я думаю. Надеюсь, это поможет кому-то!

Ответ 9

Библиотека FontView позволяет использовать символы шрифта обычного/уникода в качестве значков/графических элементов в приложении. Он может загружать шрифт через активы или сетевое расположение.

Преимущество этой библиотеки заключается в следующем:

1 - it takes care of remote resources for you
2 - scales the font size in dynamically sized views
3 - allows the font to easily be styled.

https://github.com/shellum/fontView

Пример:

Layout:

<com.finalhack.fontview.FontView
        android:id="@+id/someActionIcon"
        android:layout_width="80dp"
        android:layout_height="80dp" />

Java:

fontView.setupFont("fonts/font.ttf", character, FontView.ImageType.CIRCLE);
fontView.addForegroundColor(Color.RED);
fontView.addBackgroundColor(Color.WHITE);

Ответ 10

Есть еще одно приятное решение, которое вы можете использовать в ваших XML файлах макета напрямую и не требует использования setTypeface.

Это Joan Zapata Iconify. Вы можете прочитать здесь, что нового в Iconify v2. Он включает 9 различных библиотек шрифтов, которые можно просто использовать, добавляя зависимости к вашему файлу build.gradle.

В XML файлах макета можно выбирать между этими виджетами:

com.joanzapata.iconify.widget.IconTextview
com.joanzapata.iconify.widget.IconButton
com.joanzapata.iconify.widget.IconToggleButton

Ответ 11

Сначала создайте папку ресурсов и скопируйте значок fontawesome (.ttf) Как создать папку активов?

app-->right Click -->new-->folder --> asset folder

Следующий шаг скачать, как скачать файл .ttf?    нажмите here--> и нажмите кнопку загрузки после выгрузки и откройте веб-шрифты. наконец, выберите папку с активным текстовым стилем (ttf).

Как создать XML и Java файл в Android?

app-->res-->values string.xml

resources
    string name="calander_font" >&#xf073; <string
resources

этот пример с одним шрифтом более Unicode нажмите здесь

Activity_main.xml

 <TextView
        android:layout_width="30dp"
        android:layout_height="30dp"
        android:id="@+id/calander_view"/>

MainActivity.java

calander_tv = (TextView)findViewById(R.id.calander_view);

Typeface typeface = Typeface.createFromAsset(getAssets(),"/fonts/fa-solid-900.ttf");
calander_tv.setTypeface(typeface);
calander_tv.setText(R.string.calander_font);

Выход:

Выходное изображение

Ответ 12

Я немного опаздываю на вечеринку, но я написал настраиваемое представление, которое позволяет вам делать это, по умолчанию оно установлено в entypo, но вы можете изменить его, чтобы использовать любой значок: проверьте его здесь: github.com/MarsVard/IconView

// Редактирование библиотеки старое и больше не поддерживается... новый здесь https://github.com/MarsVard/IonIconView

Ответ 13

Если вам нужны только несколько значков шрифтов, вы можете также использовать http://fa2png.io для генерации нормальных изображений в пикселях. Но если вы регулярно добавляете новые иконки/кнопки, я бы рекомендовал версию .ttf как более гибкую.

Ответ 14

Если кто-то задается вопросом, как добавить его в программу, вы должны сделать это таким образом.

   button_info.setText(R.string.icon_heart);
    button_info.append(" Hallo"); //<<--- This is the tricky part

Ответ 15

Поскольку все ответы велики, но я не хотел использовать библиотеку, и каждое решение с помощью всего одного текстового java-кода сделало мои Activities и Fragments очень грязными. Поэтому я написал класс TextView следующим образом:

public class FontAwesomeTextView extends TextView {
private static final String TAG = "TextViewFontAwesome";
public FontAwesomeTextView(Context context) {
    super(context);
    init();
}

public FontAwesomeTextView(Context context, AttributeSet attrs) {
    super(context, attrs);
    init();
}

public FontAwesomeTextView(Context context, AttributeSet attrs, int defStyleAttr) {
    super(context, attrs, defStyleAttr);
    init();
}

@TargetApi(Build.VERSION_CODES.LOLLIPOP)
public FontAwesomeTextView(Context context, AttributeSet attrs, int defStyleAttr, int defStyleRes) {
    super(context, attrs, defStyleAttr, defStyleRes);
    init();
}

private void setCustomFont(Context ctx, AttributeSet attrs) {
    TypedArray a = ctx.obtainStyledAttributes(attrs, R.styleable.TextViewPlus);
    String customFont = a.getString(R.styleable.TextViewPlus_customFont);
    setCustomFont(ctx, customFont);
    a.recycle();
}

private void init() {
    if (!isInEditMode()) {
        Typeface tf = Typeface.createFromAsset(getContext().getAssets(), "fontawesome-webfont.ttf");
        setTypeface(tf);
    }
}

public boolean setCustomFont(Context ctx, String asset) {
    Typeface typeface = null;
    try {
        typeface = Typeface.createFromAsset(ctx.getAssets(), asset);
    } catch (Exception e) {
        Log.e(TAG, "Unable to load typeface: "+e.getMessage());
        return false;
    }

    setTypeface(typeface);
    return true;
}
}

то, что вам нужно сделать, это скопировать файл шрифта ttf в папку assets. И использовать этот обходной лист для поиска каждой строки значков.

надеюсь, что это поможет.