【问题标题】:FontAwesome implementation in tabs at TabLayoutTabLayout 选项卡中的 FontAwesome 实现
【发布时间】:2017-01-07 03:38:52
【问题描述】:

我想在标签中实现 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;
    }
}

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

【问题讨论】:

    标签: android font-awesome android-tablayout viewpagerindicator


    【解决方案1】:

    我在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);
    

    【讨论】:

    • 感谢您的帮助,但现在它看起来像这样:prntscr.com/cc7xij 有什么方法可以增加它的大小并像指示器一样改变颜色?
    • 当然有可能,有很多关于在 tabLayout 或 TabLayout 选择器中增加字体大小的线程
    • 如果你没有找到任何东西让我帮你:)
    • 我发现了这个:stackoverflow.com/questions/31471177/… 现在是这样的prntscr.com/cc8256 我会尝试修复颜色
    • prntscr.com/cc8aa3你知道如何增加房子的大小吗......它和其他两个不一样:/
    猜你喜欢
    • 2015-08-28
    • 1970-01-01
    • 2015-08-25
    • 2017-06-26
    • 2015-09-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多