私はちょうどアンドロイドを学んでいるので、その件に関する知識が不足して申し訳ありません。私は主に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);
}
}
からTextDrawableクラスを取得することができますこれは便利ですし、1 – blueware
ポイントに私はこのエラーを取得しています:アイコンFA-バーコードに関連付けられたモジュールを見つけることができません、していますアプリケーションでIconify.with(...)を使用しようとしているモジュールを登録しましたか?これをどうすれば解決できますか? build.gradleに 'com.joanzapata.iconify:android-iconify-fontawesome:2.2.2'という行をコンパイルする以外に何か追加する必要がありますか? – Vincy
@Vincyはい。 'public class MyApplication extends Application {...'ブロックのすぐ下のドキュメントにあるように、ライブラリ 'Iconify.with(new FontAwesomeModule())...'を初期化する必要があります。アプリケーション拡張クラスの作成ここでは、アプリケーションクラスhttps://www.intertech.com/Blog/androids-application-class/を拡張する方法の例を示します。重要なことはマニフェストに登録することです: 'android:name =" YourApplicationClassName "'タグ –