我正在尝试在我的应用程序上使用Font Awesome,我能够使用Typeface.createFromAsset()
集成字体,但我也想使用此字体提供的图标,但到目前为止我还没有能够做到这一点。
此特定字体包含Unicode专用区(PUA)内的图标,用于媒体播放器控件,文件系统访问,箭头等。
有没有人在Android上使用过含有图标和符号的字体,这有可能吗?
答案 0 :(得分:302)
Font Awesome似乎在我的Android应用程序中正常工作。我做了以下事情:
fontawesome-webfont.ttf
复制到我的assests文件夹在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);
答案 1 :(得分:27)
尝试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
答案 2 :(得分:10)
也许为时已晚,但我有同样的需求所以我发布了这个https://github.com/liltof/font-awsome-for-android 这是一个Android准备好的xml版本的字体非常有用,就像Keith Corwin说的那样
希望它能帮助别人。
答案 3 :(得分:8)
如上所述,这是一个很好的例子并且效果很好:
Typeface font = Typeface.createFromAsset(getAssets(), "fontawesome-webfont.ttf" );
Button button = (Button)findViewById( R.id.like );
button.setTypeface(font);
BUT! &GT;如果从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(getString((char)valLong+"");
答案 4 :(得分:4)
小而有用的library designed for this purposes:
dependencies {
compile 'com.shamanland:fonticon:0.1.9'
}
在Google Play上获取演示。
您可以在布局中轻松添加基于字体的图标:
<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"
/>
您可以将字体图标从xml:
膨胀为Drawable
<?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);
链接:
答案 5 :(得分:4)
如果你想要编程的setText而不添加字符串到string.xml
在这里查看其十六进制代码:
http://fortawesome.github.io/Font-Awesome/cheatsheet/
替换&amp;#xf066;到0xf066
Typeface typeface = Typeface.createFromAsset(getAssets(), "fontawesome-webfont.ttf");
textView.setTypeface(typeface);
textView.setText(new String(new char[]{0xf006 }));
答案 6 :(得分:2)
我用于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"
答案 7 :(得分:2)
我在C#(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。希望它可以帮助别人!
答案 8 :(得分:1)
FontView库允许您在应用程序中使用普通/ unicode字体字符作为图标/图形。它可以通过资产或网络位置加载字体。
这个库的好处是:
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);
答案 9 :(得分:1)
还有一个很好的解决方案,您可以直接在布局xml文件中使用,而不需要使用setTypeface
。
是Joan Zapata的Iconify。您可以在 Iconify v2 中阅读here新内容。它包含9种不同的字体库,只需将依赖项添加到 build.gradle 文件中即可使用。
在布局xml文件中,可以在这些小部件之间进行选择:
com.joanzapata.iconify.widget.IconTextview
com.joanzapata.iconify.widget.IconButton
com.joanzapata.iconify.widget.IconToggleButton
答案 10 :(得分:1)
最初创建资产文件夹并复制fontawesome图标(.ttf) 如何创建资产文件夹?
app->右键单击->新建->文件夹->资产文件夹
下一步下载如何下载.ttf文件? click here-->,然后在下载解压缩并打开Web字体后单击下载按钮。最后选择真实文本样式(ttf)粘贴资产文件夹。
如何在android中设计xml和java文件?
app-> res->值 string.xml
resources
string name="calander_font" > <string
resources
此示例显示了一种多字体Unicode click here
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);
输出:
答案 11 :(得分:0)
我参加派对有点晚了但是我写了一个自定义视图让你这样做,默认设置为entypo,但你可以修改它以使用任何iconfont:在这里查看:github.com/ MarsVard /图标型控件
// 编辑库是旧的,不再支持... 新来的https://github.com/MarsVard/IonIconView
答案 12 :(得分:0)
如果您只需要几个字体真棒图标,您还可以使用http://fa2png.io生成普通像素图像。但是如果你经常添加新的图标/按钮,我建议.ttf版本更灵活。
答案 13 :(得分:0)
如果有人想知道如何以程序方式添加它,你就必须这样做。
button_info.setText(R.string.icon_heart);
button_info.append(" Hallo"); //<<--- This is the tricky part
答案 14 :(得分:0)
由于所有答案都很棒,但我并不想使用一个库,每个只有一行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
文件夹中。并使用this cheat sheet查找每个图标字符串。
希望这会有所帮助。