0

Я хочу реализовать fontawesome в вкладках. Это главное, что имеет значение.FontAwesome реализация в вкладках TabLayout

MainActivity в OnCreate:

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 
    } 

Метод, который находится в MainActivity для ViewPager:

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; 
    } 
} 

Как можно это сделать? Есть идеи?

ответ

1

Я использовал шрифт Awesome в TabLayout, но это немного противно.

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) Override 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); 
+0

Спасибо за помощь, но теперь она выглядит следующим образом: http://prntscr.com/cc7xij Любой способ увеличить это размер и изменить цвет, как это для индикатора? – WinterChilly

+0

Конечно, возможно, есть много потоков из-за увеличения размера шрифта в tabLayout или селектора для TabLayout – Amir

+0

, если вы не нашли ничего, позвольте мне помочь вам :) – Amir