Font Awesome 是非常受欢迎的图标工具,许多网站都在使用。它有免费和专业的图标集,但你可以在免费的图标集中找到大多数图标。每个图标都将由 unicode (
)表示。我们使用这个 unicode 在 TextView 中显示图标。因为它是一个普通的 TextView,所有的文本样式属性(颜色,大小,划片等)可以应用。
例如:如果你想显示安卓机器人图标,您可以使用 
unicode 作为 TextView 值。
详情可参考此项目:https://github.com/ravi8x/Android-Font-Awesome
Font Awesome 的 Android Library
为了使用 Font Awesome 图标集合,您必须将 Font Awesome 字体文件直接添加到您的 assets
文件夹中,并在 TextView
上应用合适的 fontFace
,这一步很简单。但是我们可能还希望图标能显示在其他小部件中,比如 按钮、菜单、底部导航 和 导航抽屉等。在非 TextView 中显示图标需要一些额外工作。因此,我编写了一个库,结合了所有必要的方法来在多个小部件中呈现图标。
首先,在构建 build.gradle
中包含 fontawesome 然后同步项目:
dependencies {
// font awesome
implementation 'info.androidhive:fontawesome:0.0.5'
}
如何使用它
TextView 中显示 Font Awesome 图标
显示字体图标的最简单方法是,通过将适当的图标名称设置为文本值来使用 FontTextView。这个小部件是从 AppCompatTextView 扩展而来的,所以所有的文本视图属性都适用于这个小部件。
<info.androidhive.fontawesome.FontTextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/fa_calendar_check_solid"
android:textColor="@color/icon_color"
android:textSize="@dimen/icon_size"
app:solid_icon="true" />
solid_icon :要显示实体图标,请将此值设置为 true。 brand_icon :要显示品牌图标,请将此值设置为 true。
使用 FontDrawable
在 xml 布局中使用图标很容易,但是如果您想将图标用于按钮或菜单等其他小部件,则可以使用 FontDrawable 元素来应用图标。例如,如果您想要使用 Font Awesome 图标来浮动动作按钮,您可以使用如下所示的FontDrawable。
FloatingActionButton fab = findViewById(R.id.fab);
// using paper plane icon for FAB
FontDrawable drawable = new FontDrawable(this, R.string.fa_paper_plane_solid, true, false);
// white color to icon
drawable.setTextColor(ContextCompat.getColor(this, android.R.color.white));
fab.setImageDrawable(drawable);
在 Menu 中使用(底部导航、导航抽屉等)
你也可以使用小部件中的字体图标,这些小部件使用菜单文件来渲染工具栏图标、底部导航、导航抽屉等项,为了渲染菜单中的图标,你可以使用 FontDrawable 来设置图标,但是它需要一些 java 代码的技巧。下面的例子显示了在“导航抽屉”菜单中重新设置字体图标。完整的例子可以在 这里 找到。
public class MainActivity extends AppCompatActivity
implements NavigationView.OnNavigationItemSelectedListener {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
intDrawerLayout();
}
/**
* Changing navigation drawer icons
* This involves looping through menu items and applying icons
*/
private void intDrawerLayout() {
NavigationView navigationView = findViewById(R.id.nav_view);
navigationView.setNavigationItemSelectedListener(this);
ImageView iconHeader = navigationView.getHeaderView(0).findViewById(R.id.nav_header_icon);
FontDrawable drawable = new FontDrawable(this, R.string.fa_font_awesome, false, true);
drawable.setTextColor(ContextCompat.getColor(this, android.R.color.white));
drawable.setTextSize(50);
iconHeader.setImageDrawable(drawable);
int[] icons = {
R.string.fa_home_solid, R.string.fa_calendar_alt_solid, R.string.fa_user_solid,
R.string.fa_heart_solid, R.string.fa_comment_solid, R.string.fa_dollar_sign_solid, R.string.fa_gift_solid
};
renderMenuIcons(navigationView.getMenu(), icons, true, false);
int[] iconsSubmenu = {R.string.fa_cog_solid, R.string.fa_sign_out_alt_solid};
renderMenuIcons(navigationView.getMenu().getItem(7).getSubMenu(), iconsSubmenu, true, false);
}
/**
* Looping through menu icons are applying font drawable
*/
private void renderMenuIcons(Menu menu, int[] icons, boolean isSolid, boolean isBrand) {
for (int i = 0; i < menu.size(); i++) {
MenuItem menuItem = menu.getItem(i);
if (!menuItem.hasSubMenu()) {
FontDrawable drawable = new FontDrawable(this, icons[i], isSolid, isBrand);
drawable.setTextColor(ContextCompat.getColor(this, R.color.icon_nav_drawer));
drawable.setTextSize(22);
menu.getItem(i).setIcon(drawable);
}
}
}
}