2016-11-02 9 views
3

Ich bin nur Android lernen so leid für meinen Mangel an Wissen über das Thema. Ich arbeite hauptsächlich als Web-Entwickler und wir verwenden Font Awesome die ganze Zeit, also habe ich versucht, es mit Android zu arbeiten. Ich fand heraus, dass ich die Schriftart here verwenden konnte. Mit etwas tieferem Suchen fand ich heraus, wie man ein font awesome Icon in der Aktionsmenüleiste im Titel here platziert. Ich verpasse die Fähigkeit, Backup-Text zu haben, wenn Platz ist, indem ich den Titel anstelle des Icons und des Titels setze.Android verwenden font-awesome Schriftart als Symbol im Menüpunkt

Ich frage mich, ob ich das Symbol in der Schriftart super anstelle des Titels setzen und einfach normalen beschreibenden Text für den Titel haben könnte. Wenn ich die setIcon-Methode für den Menüeintrag verwende, möchte ich eine zeichnende oder zeichenbare Ressourcen-ID. Kann ich es in ein Zeichen umwandeln? Was ist der beste Weg, um die Schrift für das Symbol großartig zu halten und sowohl das Symbol als auch den Titel zu haben? Jede Hilfe oder Richtung wird geschätzt.

So habe ich den folgenden Code in meiner Haupttätigkeit:

public class MainActivity extends AppCompatActivity { 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 

     // https://stackoverflow.com/a/32780748/2066736 
     getSupportActionBar().setDisplayShowHomeEnabled(true); 
     getSupportActionBar().setLogo(R.drawable.redbird_webkit_onwht); 
     getSupportActionBar().setDisplayUseLogoEnabled(true); 

     setContentView(R.layout.activity_main); 
    } 

    @Override 
    public boolean onCreateOptionsMenu(Menu menu) { 
     // Inflate the menu; this adds items to the action bar if it is present. 
     getMenuInflater().inflate(R.menu.main_menu, menu); 

     setFontAwesomeMenuItem(menu, R.string.icon_calendar, R.id.action_calendar); 
     setFontAwesomeMenuItem(menu, R.string.icon_search, R.id.action_search); 
     setFontAwesomeMenuItem(menu, R.string.icon_plus, R.id.action_new_post); 

     // menu.add(0, MENU_ITEM_LOGOUT, 102, R.string.logout); 

     return true; 
    } 

    private void setFontAwesomeMenuItem (Menu menu, int rIdString, int rIdIdOfElement) { 
     SpannableString s = new SpannableString(getString(rIdString)); 
     s.setSpan(new TypefaceSpan(this, "fontawesome-webfont.ttf"), 0, s.length(), 
       Spannable.SPAN_EXCLUSIVE_EXCLUSIVE); 

     menu.findItem(rIdIdOfElement).setTitle(s); 
    } 
} 

Und ich bekam die folgende TypefaceSpan Klasse von here:

/** 
* Style a {@link Spannable} with a custom {@link Typeface}. 
* 
* @author Tristan Waddington 
* copied from https://stackoverflow.com/a/15181195/2066736 
*/ 
public class TypefaceSpan extends MetricAffectingSpan { 
    /** An <code>LruCache</code> for previously loaded typefaces. */ 
    private static LruCache<String, Typeface> sTypefaceCache = 
      new LruCache<String, Typeface>(12); 

    private Typeface mTypeface; 

    /** 
    * Load the {@link Typeface} and apply to a {@link Spannable}. 
    */ 
    public TypefaceSpan(Context context, String typefaceName) { 
     mTypeface = sTypefaceCache.get(typefaceName); 

     if (mTypeface == null) { 
      mTypeface = Typeface.createFromAsset(context.getApplicationContext() 
        .getAssets(), String.format("fonts/%s", typefaceName)); 

      // Cache the loaded Typeface 
      sTypefaceCache.put(typefaceName, mTypeface); 
     } 
    } 

    @Override 
    public void updateMeasureState(TextPaint p) { 
     p.setTypeface(mTypeface); 

     // Note: This flag is required for proper typeface rendering 
     p.setFlags(p.getFlags() | Paint.SUBPIXEL_TEXT_FLAG); 
    } 

    @Override 
    public void updateDrawState(TextPaint tp) { 
     tp.setTypeface(mTypeface); 

     // Note: This flag is required for proper typeface rendering 
     tp.setFlags(tp.getFlags() | Paint.SUBPIXEL_TEXT_FLAG); 
    } 
} 

Antwort

5

Antwort ist spät, aber für zukünftige Besucher gibt es eine große Bibliothek für das Arbeiten mit der Schriftart, die in android fantastisch ist, rief iconsify geschrieben durch JoanZapata an. Sie können es finden here

Nach Bibliothek corectly initialisiert Sie so etwas wie dies mit Ihrem ActionBar Menüpunkt können:

<menu xmlns:android="http://schemas.android.com/apk/res/android" 

    <item 
     android:id="@+id/item_menu 
     showAsAction="always" 
     android:title="@string/title"/> 

</menu> 

und von Java-Code müssen Sie nur so etwas tun:

menu.findItem(R.id.item_menu).setIcon(
    new IconDrawable(this, FontAwesomeIcons.fa_share) 
    .colorRes(R.color.ab_icon) 
    .actionBarSize()); 

Hoffnung würde dies jemand helfen :) Frag, wenn Sie Fragen haben :)

+0

Dies ist hilfreich, und auf den Punkt +1 – blueware

+1

Ich erhalte diese Fehlermeldung: Kann nicht das Modul mit Symbol fa-Barcode zugeordnet finden, haben Sie haben das Modul, das Sie mit Iconify.with (...) in Ihrer Anwendung verwenden möchten, registriert? Wie kann ich das lösen? Muss ich etwas anderes als compile hinzufügen "com.joanzapata.conify: android-iconify-fontawesome: 2.2.2" Zeile in der build.gradle? – Vincy

+1

@Vincy Ja. Sie müssen die Bibliothek 'Iconify.with (new FontAwesomeModule()) ...' initalisieren, wie in der Dokumentation gezeigt, direkt unterhalb der 'öffentlichen Klasse MyApplication extends Application {...' block. Klassenerweiterung erstellen Anwendung Hier finden Sie ein Beispiel zum Erweitern der Anwendungsklasse https://www.intertech.com/Blog/androids-application-class/. Das Wichtigste ist, es in Manifest zu registrieren: 'android: name =" YourApplicationClassName "' innerhalb Tag –

1

diese Bitte überprüfen Sie:

TextDrawable faIcon = new TextDrawable(this); 
faIcon.setTextSize(TypedValue.COMPLEX_UNIT_DIP, 20); 
faIcon.setTextAlign(Layout.Alignment.ALIGN_CENTER); 
faIcon.setTypeface(FontAwesomeManager.getTypeface(this, FontAwesomeManager.FONTAWESOME)); 
faIcon.setText(getResources().getText(R.string.fa_android)); 
Menu menu = (Menu) findViewById(R.id.menu); 
MenuItem menuItem = menu.findItem(R.id.menu_item); 
menuItem.setIcon(faIcon); 

können Sie TextDrawable Klasse erhalten von here

Source

Verwandte Themen