TabLayout 选项卡中的 FontAwesome 实现

FontAwesome implementation in tabs at TabLayout

我想在选项卡中实现 fontawesome。这是最重要的事情。

OnCreate 中的 MainActivity:

    viewPager = (ViewPager) findViewById(R.id.pager);
    setupViewPager(viewPager);    //Kreiramo viewpager oz. klic funkcije
    TabLayout tabLayout = (TabLayout) findViewById(R.id.tab_layout);
    if (tabLayout != null) {
        tabLayout.setupWithViewPager(viewPager);  //Poveže tab_layout z viewpagerjem
    }

Viewpager 的 MainActivity 中的一个方法:

private void setupViewPager(ViewPager viewPager) {
    AdapterViewPager adapter = new AdapterViewPager(getSupportFragmentManager());
    //Kreiraš fragment, ki bo v ViewPagerju
    adapter.addFragment(new Fragment1(), "HOME");
    adapter.addFragment(new Fragment2(), "HEART");
    adapter.addFragment(new Fragment3(), "CRITERIA");
    viewPager.setAdapter(adapter);
    viewPager.setOffscreenPageLimit(2);
}

自定义 AdapterViewPager:

public class AdapterViewPager extends FragmentStatePagerAdapter {
    private final List<Fragment> mFragmentList = new ArrayList<>();
    private final List<String> mFragmentTitleList = new ArrayList<>();


    public AdapterViewPager(FragmentManager manager) {
        super(manager);
    }

    @Override
    public Fragment getItem(int position) {
        return mFragmentList.get(position);
    }

    @Override
    public int getCount() {
        return mFragmentList.size();
    }

    public void addFragment(Fragment fragment, String title) {
        mFragmentList.add(fragment);
        mFragmentTitleList.add(title);
    }

    @Override
    public CharSequence getPageTitle(int position) {
        return mFragmentTitleList.get(position);
    }

    @Override
    public int getItemPosition(Object object) {
        return POSITION_NONE;
    }
}

如何做到这一点?有什么想法吗?

我在 TabLayout 中使用了 Awesome 字体,但它有点讨厌。

1- 将字体图标放入 asset/font 文件夹。

2- 使用以下代码应用您的字体:

private void changeTabsFont() {

        Typeface font = Typeface.createFromAsset(getAssets(),"fonts/font-awsome.ttf"); 
        ViewGroup vg = (ViewGroup) tabLayout.getChildAt(0);
        int tabsCount = vg.getChildCount();
        for (int j = 0; j < tabsCount; j++) {
            ViewGroup vgTab = (ViewGroup) vg.getChildAt(j);
            int tabChildsCount = vgTab.getChildCount();
            for (int i = 0; i < tabChildsCount; i++) {
                View tabViewChild = vgTab.getChildAt(i);
                if (tabViewChild instanceof TextView) {
                    ((TextView) tabViewChild).setTypeface(font);
                }
            }
        }
    } 

3- 现在只需将 font-awesome 代码复制到字符串资源中,然后在 TabLayout.

中使用它们
<string name="icon_home">&#xf015;</string>

4-(替代 3)覆盖适配器的 getTitle:

 @Override
        public CharSequence getPageTitle(int position) {
            switch (position) {
                case POSITION_HOME:
                    return mContext.getResources().getString(R.string.icon_home);
             //  ... other title

            }
        }

因为Tablayout 没有setTypeface 方法你必须使用这样的代码。如果你使用 PagerSlidingTabStrip 它有这样的方法,你可以很容易地应用你的字体。

tabs.setTypeface(typeFace , 0);