Как использовать значки и символы из "Шрифт 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"></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"></string>
button.setText(getString(R.string.icon_heart));
Если вам нужно добавить его динамически, можете использовать это:
String iconHeart = "";
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" > <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
. И использовать этот обходной лист для поиска каждой строки значков.
надеюсь, что это поможет.