(Android)font-awesome图标没有显示

时间:2017-01-30 03:30:08

标签: android material-design

我试图使用字体很棒的图标并遇到一些问题。它从MainActivity开始工作,但是当我从Fragment使用时它没有显示图标。

这是我的HomeFragment

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
                         Bundle savedInstanceState) {

  View home = inflater.inflate(R.layout.fragment_home, container, false);
  View feed_row = inflater.inflate(R.layout.feed_row, container, false);

  like_button = (Button) feed_row.findViewById(R.id.like_button);
  Typeface tf = Typeface.createFromAsset(getActivity().getAssets(), "fonts/fontawesome-webfont.ttf");
  like_button.setTypeface(tf);

  mHomeFeed = (RecyclerView) home.findViewById(R.id.home_feed);
  mLayoutManager = new LinearLayoutManager(this.getActivity());
  mHomeFeed.setHasFixedSize(true);
  mHomeFeed.setLayoutManager(mLayoutManager);

这是feed_row.xml:

<Button
   android:id="@+id/like_button"
   android:layout_width="wrap_content"
   android:layout_height="wrap_content"
   android:text="@string/icon_heart"
   android:background="@color/noBackground"/>

的strings.xml

<string name="icon_heart">&#xf004;</string>
<string name="icon_comment">&#xf0e5;</string>

我现在该怎么办?它没有错误,但图标如下所示:

this

2 个答案:

答案 0 :(得分:0)

改为使用:

Typeface tf = Typeface.createFromAsset(getActivity().getAssets(), 
                                       "fonts/fontawesome-webfont.ttf");

由于不断为每个图标创建新字体(如answer评论中所述),因此存在内存问题,您可以使用Calligraphy。使用库配置应用程序后,只需添加fontPath属性:

所以你有一个更灵活的代码,其中字体只在XML中:

<Button
   android:id="@+id/like_button"
   android:layout_width="wrap_content"
   android:layout_height="wrap_content"
   android:text="@string/icon_heart"
   android:background="@color/noBackground"
   fontPath="fonts/fontawesome-webfont.ttf"/>

答案 1 :(得分:0)

您可以通过创建一个类并从Button类扩展它来完成此操作

public class AwesomeFontButton extends Button {

    public AvenirBookEditText(Context context, AttributeSet attrs, int defStyle) {
        super(context, attrs, defStyle);
        init();
    }

    public AvenirBookEditText(Context context, AttributeSet attrs) {
        super(context, attrs);
        init();
    }

    public AvenirBookEditText(Context context) {
        super(context);
        init();
    }

    private void init() {
        if (!isInEditMode()) {
            Typeface tf = Typeface.createFromAsset(getContext().getAssets(),
                    "fontawesome-webfont.ttf"); //add your font path here
            setTypeface(tf);
        }
    }

}

并在xml中使用它:

<YourFilePath.AwesomeFontButton 
   android:id="@+id/like_button"
   android:layout_width="wrap_content"
   android:layout_height="wrap_content"
   android:text="@string/icon_heart"
   android:background="@color/noBackground"/>

在xml中随处使用