2016-11-02 11 views
3

私はちょうどアンドロイドを学んでいるので、その件に関する知識が不足して申し訳ありません。私は主にWeb Developerとして働き、Font Awesomeを常に使用していますので、Androidで動作させようとしていました。私は最初に素晴らしいフォントhereを使用できることを知った。より深い検索をして、タイトルバーのアクションメニューバーにフォントの素晴らしいアイコンを配置する方法を見つけました。here私はアイコンとタイトルの代わりにタイトルを設定することで余裕があるときにバックアップテキストを持つ能力を失っている。Androidはメニュー項目のアイコンとしてfont-awesome fontを使用します

タイトルの代わりにすばらしいフォントでアイコンを設定して、タイトルの通常の説明テキストを付けることができるのだろうかと思っていました。メニュー項目でsetIconメソッドを実行すると、drawableまたはdrawableリソースIDが必要になります。私はそれをdrawableに変換できますか?どのようなアイコンを素晴らしいフォントを維持するアプローチし、アイコンとタイトルの両方を持つための最良の方法は何ですか?どんな助けや方向性もありがとうございます。

だから私は私の主な活動で次のコードを持っている:

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

を私はhereから次TypefaceSpanクラスを得た:

/** 
* 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); 
    } 
} 

答えて

5

回答が遅れているが、将来の訪問者のための素晴らしいがありますJoanZapataによって書かれたiconifyと呼ばれるアンドロイドで素晴らしいフォントで作業するためのライブラリ。あなたはそれをライブラリがcorectlyあなたのアクションバーのメニュー項目に、このような何かを行うことができ、初期化された後here

を見つけることができます。

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

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

</menu> 

とJavaコードからあなただけのこのような何かを実行する必要があります。

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

これが誰かを助ける希望:)ご質問があれば、掲載:)

+0

からTextDrawableクラスを取得することができますこれは便利ですし、1 – blueware

+1

ポイントに私はこのエラーを取得しています:アイコンFA-バーコードに関連付けられたモジュールを見つけることができません、していますアプリケーションでIconify.with(...)を使用しようとしているモジュールを登録しましたか?これをどうすれば解決できますか? build.gradleに 'com.joanzapata.iconify:android-iconify-fontawesome:2.2.2'という行をコンパイルする以外に何か追加する必要がありますか? – Vincy

+1

@Vincyはい。 'public class MyApplication extends Application {...'ブロックのすぐ下のドキュメントにあるように、ライブラリ 'Iconify.with(new FontAwesomeModule())...'を初期化する必要があります。アプリケーション拡張クラスの作成ここでは、アプリケーションクラスhttps://www.intertech.com/Blog/androids-application-class/を拡張する方法の例を示します。重要なことはマニフェストに登録することです: 'android:name =" YourApplicationClassName "' タグ –

1

これを確認してください。

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

あなたはhere

Source

関連する問題