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"></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);
我想在选项卡中实现 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"></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);