Yerel Android Uygulamasında “Font Awesome” den simgeler ve semboller nasıl kullanılır


153

Uygulamamda Font Awesome'i kullanmaya çalışıyorum , yazı tipini kullanarak entegre edebildim Typeface.createFromAsset(), ancak bu yazı tipi tarafından sağlanan simgeleri de kullanmak istiyorum, ancak şimdiye kadar bunu yapamadım.

Bu belirli yazı tipi, medya yürütücü denetimleri, dosya sistemi erişimi, oklar vb. İçin Unicode Özel Kullanım Alanı (PUA) içinde simgeler içerir.

Android'de simge ve simge içeren yazı tipleri kullanan var mı, bu mümkün mü?



2
Bağlantıyı güncelledim
Julian Suarez

23
Bunun Stack Overflow için konu dışı olduğunu kabul etmiyorum. Bana öyle geliyor ki ( stackoverflow.com/help/on-topic ) yönergelerine uyuyor , çünkü: belirli bir programlama problemi hakkında (belirli bir mobil platforma belirli bir font tabanlı simge seti nasıl uygulanır) ve pratik, cevaplanabilir bir sorun (bence aşağıdaki cevabımı görebilirsiniz).
Keith Corwin

Android'de harika yazı tipi uygulamak için bu repo göz atın github.com/bperin/FontAwesomeAndroid
Brian

şu kütüphaneyi kontrol edin: blog.shamanland.com/p/android-fonticon-library.html , Maven Central'da mevcuttur. demo uygulamasına bakın: play.google.com/store/apps/…
Oleksii K.

Yanıtlar:


307

Font Awesome benim android app benim için iyi çalışıyor gibi görünüyor. Aşağıdakileri yaptım:

  1. fontawesome-webfont.ttfAssests klasörüne kopyalandı
  2. Bu sayfayı kullanarak istediğim simgeler için karakter varlıklarını buldum: http://fortawesome.github.io/Font-Awesome/cheatsheet/
  3. Her simge için strings.xml dosyasına bir girdi oluşturuldu. Örneğin bir kalp için:

    <string name="icon_heart">&#xf004;</string>
  4. Xml mizanpajım görünümünde adı geçen girişe atıfta bulunuldu:

     <Button
         android:id="@+id/like"
         style="?android:attr/buttonStyleSmall"
         ...
         android:text="@string/icon_heart" />
  5. Yazı tipini onCreate yöntemime yükledim ve uygun Görünümler için ayarlayın:

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

46
İyi fikir. Ancak, her simge için sürekli yeni bir yazı biçimi oluştururken bellek sorunlarına dikkat edin. Bunun yerine, Hashtableburada önerildiği gibi simge yazı
biçiminizi



1
Benim kod ile bazı sorunlar var: Ben dize ilan sonra strings.xmlgibi <string name="faicon">&#xf001;</string>benim kod metni ayarlayın, Tamam olacak. Ama denediğimde mTextView.setText("&#xf004;");sadece ham metni gösteriyor. Herkes yardımcı olabilir mi? thks
vtproduction

2
Metin görünümüne bu text.setText (Html.fromHtml ("& # xf000;")) gibi dinamik dize ekleyin;
rana_sadam

29

IcoMoon'u deneyin: http://icomoon.io

  • İstediğiniz simgeleri seçin
  • Her simgeye karakter atayın
  • Yazı tipini indir

Diyelim ki, oynat simgesini seçtiniz, 'P' harfini atadınız ve dosyayı icomoon.ttfvarlık klasörünüze indirdiniz. Simgeyi şu şekilde gösterirsiniz:

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

Simge yazı tiplerini kullanma hakkında açıklama içeren ve simgeleri daha da güzelleştirmek için degradeler ekleyen güzel Android uygulamaları yapma hakkında bir konuşma yaptım: http://www.sqisland.com/talks/beautiful-android

Simge yazı tipi açıklaması 34. slayttan başlar: http://www.sqisland.com/talks/beautiful-android/#34


10

Belki çok geç ama aynı ihtiyacı vardı, bu yüzden bu https://github.com/liltof/font-awsome-for-android yayınladım Bu Keith Corwin'in dediği gibi harika bir yazı tipi android hazır xml versiyonu

Umarım başkalarına yardımcı olur.


1
SO hoş geldiniz. Kodunuzun çok uzun olmadığını gördüm. Neden bu cevaba göndermiyorsun? Bağlantılar zamanla çökebilir.
Andre Silva

Bu harika .xml dosyasını haftalardır kullanıyorum. Ama şimdi fa_times özlediğini fark ettim. Lütfen güncelleyebilir misiniz? Düzenleme: oh, fa_remove. veya dosyanızda icon_remove.
mobilGelistirici

Harika yazı tipini kullanarak düğmeye metin yanı sıra simge nasıl eklenir? Düğme içine çekilebilir sola veya sağa çekilebilir sağ ekleyin.
Siddharth_Vyas

9

Yukarıdaki gibi harika bir örnek ve harika çalışıyor:

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

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

FAKAT! > xml'den ayarladığınız düğmenin içindeki dize varsa bu işe yarar:

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

Dinamik olarak eklemeniz gerekirse bunu kullanabilirsiniz:

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

en iyi yol! teşekkürler ben sadece dikkat düğmesi TextView'un ve get dizeyle String.valueOf yerine _ + oyu vermek
erfan

Sonunda harika yazı tipi kullanmak için bir çözüm. Çok teşekkürler!
18'de

4

String.xml dosyasına dize eklemeden programlı setText istiyorsanız

onaltılı kodunu buradan görebilirsiniz:

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

yerine & # xf066; - 0xf066

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

4

Bu amaçlar için tasarlanmış küçük ve kullanışlı bir kütüphane vardır :

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

Google Play'de demo alın .

resim açıklamasını buraya girin

Düzeninize yazı tipi tabanlı simge kolayca ekleyebilirsiniz:

<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"
    />

Yazı tipi simgesini Drawablexml biçiminde şişirebilirsiniz :

<?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 kodu:

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

Bağlantılar:


Gerçekten iyi bir kütüphane, teşekkürler. şişme xml-tanımları biraz acı olsa da, ben doğrudan FontIconView kullanmayı tercih
hotzen

Bunu Android 4.2.2 ile bir Lenovo'da test ettim ve simgeler gelmedi, ne olabilir?
Ollie Strevel

En son sürümü deneyin0.1.9
Oleksii K.Şubat

2

Programlı olarak text özelliğini ayarlamak için bu yardımcı sınıf C # (Xamarin) yaptı. Benim için oldukça iyi çalışan:

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'ya dönüştürmek için yeterince kolay olmalı diye düşünüyorum. Umarım birine yardım eder!


2

Font Awesome için kullandığım kütüphanelerden biri şudur:

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

özellikle,

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

Belgeleri anlamak kolaydır.

İlk olarak, build.gradle dosyasına gereken bağımlılıkları ekleyin:

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

İkinci olarak, bunu XML'inize ekleyebilirsiniz:

<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"
/>

ancak yukarıdaki kod örneğini kullanmak istiyorsanız bunu kök düzeninize eklediğinizden emin olun:

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

Bunu takip ettim ama hatayı aldım: Hata: (54) 'xxx.yyy' paketindeki 'fa_icon' özelliği için kaynak tanımlayıcı bulunamadı
Hajjat

@Hajjat ​​bunu kullanmak için 1.2.3 sürümünü kullanmanız gerekir. Kodu yansıtacak şekilde güncelledim. Dene.
Abdul Rahman A Samad

1

FontView kütüphanesi, normal / unicode font karakterlerini uygulamanızda simgeler / grafikler olarak kullanmanızı sağlar. Yazı tipini öğeler veya bir ağ konumu üzerinden yükleyebilir.

Bu kütüphanenin yararı şudur:

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

Misal:

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

Bellekteki Typeface nesnesini önbelleğe alıyor mu? Android'de yazı tiplerini işlerken bilinen bir bellek sızıntısı potansiyeli var.
TheRealChx101

1

Düzen xml dosyalarınızda doğrudan kullanabileceğiniz ve kullanmanız gerekmeyen başka bir güzel çözüm var setTypeface.

Joan Zapata'nın Iconify'ı . Iconify v2'deki yenilikleri buradan okuyabilirsiniz . Build.gradle dosyanıza bağımlılıklar ekleyerek kullanabileceğiniz 9 farklı yazı tipi kütüphanesi içerir .

Düzen xml dosyalarında şu widget'lar arasından seçim yapmak mümkündür:

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

1

Başlangıçta varlık klasörü oluşturun ve fontawesome simgesini (.ttf) kopyalayın Varlık klasörü nasıl oluşturulur?

app -> sağ tıklayın -> yeni -> klasör -> varlık klasörü

sonraki adım .ttf dosyası nasıl indirilir? buraya tıklayın -> ve indir ve web yazı tiplerini açtıktan sonra indir düğmesine tıklayın. son olarak gerçek metin stili (ttf) yapıştır varlık klasörü seçin.

android xml ve java dosyası nasıl tasarlanır?

app -> res -> değerler string.xml

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

bir yazı tipi bu Unicode örneği daha buraya tıklayın

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

Çıktı:

Çıktı resmi


0

Partiye biraz geç kaldım ama bunu yapmanıza izin veren özel bir görünüm yazdım, varsayılan olarak entypo'ya ayarlandı, ancak herhangi bir iconfont kullanmak için değiştirebilirsiniz: buradan kontrol edin: github.com/MarsVard/IconView

// kütüphaneyi düzenle eski ve artık desteklenmiyor ... yenisi burada https://github.com/MarsVard/IonIconView


Kitaplığınız Yazı Tipi'ni önbelleğe almıyor ve bunun yerine görünüm her oluşturulduğunda onu oluşturuyor.
Fernando Camargo

1
@FernandoCamargo Haklı, bu kütüphane eskidir ve daha iyi önbellekleme ile güncellenmelidir ... işte daha iyi performansa sahip yeni kütüphane github.com/MarsVard/IonIconView
Mars

0

Sadece birkaç harika yazı tipi ikonuna ihtiyacınız varsa, normal piksel görüntüleri oluşturmak için http://fa2png.io komutunu da kullanabilirsiniz . Ancak düzenli olarak yeni simgeler / düğmeler eklerseniz .ttf sürümünü daha esnek olarak tavsiye ederim.


0

Birisi programa nasıl ekleyeceğinizi merak ederse, bu şekilde yapmanız gerekir.

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

0

Tüm cevaplar harika ama bir kütüphane kullanmak istemiyordu ve sadece bir satır java kodu ile her çözüm benim Activitiesve Fragmentsçok dağınık yaptı. Bu yüzden TextViewsınıfı şöyle yazdım :

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

yapmanız gereken yazı tipi ttfdosyasını assetsklasöre kopyalamak ve her bir simge dizesini bulmak için bu hile sayfasını kullanın .

Bu yardımcı olur umarım.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.