2016-12-11 3 views
0

Я собираюсь изменить собственный шрифт TabLayout, но я не знаю, почему он больше не меняется, у меня есть 4 вкладки и ViewPager и есть 4 fragment. теперь проблема в том, что я хочу изменить шрифт текста вкладки. на самом деле я использовал каллиграфию для разных частей, но я не знаю, почему я не мог установить ее на свою вкладку. то, что я сейчас использую, заключается в том, что я разработал метод FragmentPagerAdapter's и установил там пользовательскую вкладку и загрузил файл с настраиваемой вкладкой xml.Пользовательский шрифт tablayout не изменяется

Это мой код:

package com.example.noavaran.drugstore.Activity; 

import android.content.Context; 
import android.graphics.Color; 
import android.graphics.PorterDuff; 
import android.graphics.Typeface; 
import android.support.annotation.NonNull; 
import android.support.annotation.Nullable; 
import android.support.design.widget.TabLayout; 
import android.support.v4.app.Fragment; 
import android.support.v4.app.FragmentManager; 
import android.support.v4.app.FragmentPagerAdapter; 
import android.support.v4.view.PagerAdapter; 
import android.support.v4.view.ViewPager; 
import android.support.v7.app.AppCompatActivity; 
import android.os.Bundle; 
import android.support.v7.widget.AppCompatTextView; 
import android.view.LayoutInflater; 
import android.view.View; 
import android.view.ViewGroup; 
import android.widget.ImageView; 
import android.widget.TextView; 

import com.example.noavaran.drugstore.Fragment.AddressFragment; 
import com.example.noavaran.drugstore.Fragment.IssueFragment; 
import com.example.noavaran.drugstore.Fragment.MenuFragment; 
import com.example.noavaran.drugstore.Fragment.SearchFragment; 
import com.example.noavaran.drugstore.Helper.CustomViewPager; 
import com.example.noavaran.drugstore.R; 

import java.util.ArrayList; 
import java.util.List; 

import layout.fragment_approve; 
import uk.co.chrisjenx.calligraphy.CalligraphyContextWrapper; 
import uk.co.chrisjenx.calligraphy.CalligraphyUtils; 

public class MainPageActivity extends AppCompatActivity { 
    private TabLayout tabLayout; 
    public Context context; 
    public Typeface tf; 
    public static boolean a=false; 
    private CustomViewPager viewPager; 
    private int[] tabIcons = { 
      R.drawable.menu, 
      R.drawable.address_icon, 
      R.drawable.search_icon, 
      R.drawable.issue_icon 
    }; 
    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main_page); 
     tf = Typeface.createFromAsset(getAssets(), "IRANSans_Bold.ttf"); 


     tabCustomization(); 
     changeTabsFont(); 
     setupTabIcons(); 
    } 

    private void tabCustomization() { 
     viewPager = (CustomViewPager) findViewById(R.id.viewPager); 
     viewPager.setPagingEnabled(false); 

     setupViewPager(viewPager); 
     tabLayout = (TabLayout) findViewById(R.id.tabs); 
     tabLayout.setupWithViewPager(viewPager); 
// Iterate over all tabs and set the custom view 

    } 
    private void setupTabIcons() { 

     tabLayout.getTabAt(0).setIcon(tabIcons[0]); 
     tabLayout.getTabAt(1).setIcon(tabIcons[1]); 
     tabLayout.getTabAt(2).setIcon(tabIcons[2]); 
     tabLayout.getTabAt(3).setIcon(tabIcons[3]); 


     tabLayout.getTabAt(0).getIcon().setColorFilter(Color.parseColor("#a8a8a8"), PorterDuff.Mode.SRC_IN); 
     tabLayout.getTabAt(1).getIcon().setColorFilter(Color.WHITE, PorterDuff.Mode.SRC_IN); 
     tabLayout.getTabAt(2).getIcon().setColorFilter(Color.WHITE, PorterDuff.Mode.SRC_IN); 
     tabLayout.getTabAt(3).getIcon().setColorFilter(Color.WHITE, PorterDuff.Mode.SRC_IN); 

     tabLayout.setOnTabSelectedListener(new TabLayout.OnTabSelectedListener(){ 

      @Override 
      public void onTabSelected(TabLayout.Tab tab) { 
       tab.getIcon().setColorFilter(Color.parseColor("#a8a8a8"), PorterDuff.Mode.SRC_IN); 

      } 

      @Override 
      public void onTabUnselected(TabLayout.Tab tab) { 
       tab.getIcon().setColorFilter(Color.WHITE, PorterDuff.Mode.SRC_IN); 

      } 

      @Override 
      public void onTabReselected(TabLayout.Tab tab) { 

      } 
     }); 
    } 
    public void setupViewPager(ViewPager viewPager) { 
     ViewPagerAdapter adapter = new ViewPagerAdapter(getSupportFragmentManager()); 


      adapter.addFragment(new MenuFragment(), "menu"); 

     adapter.addFragment(new AddressFragment(), "Address"); 
     adapter.addFragment(new SearchFragment(), "Search"); 
     adapter.addFragment(new IssueFragment(), "Issue"); 
     for (int i = 0; i < tabLayout.getTabCount(); i++) { 
      TabLayout.Tab tab = tabLayout.getTabAt(i); 

      tab.setCustomView(adapter.getTabView(i)); 
     } 
     viewPager.setAdapter(adapter); 

    } 

    class ViewPagerAdapter extends FragmentPagerAdapter { 
     private final List<Fragment> mFragmentList = new ArrayList<>(); 
     private final List<String> mFragmentTitleList = new ArrayList<>(); 

     public ViewPagerAdapter(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); 
     } 
     public View getTabView(int position) { 
      // Given you have a custom layout in `res/layout/custom_tab.xml` with a TextView and ImageView 
      View view= LayoutInflater.from(context).inflate(R.layout.custom_tab, null); 
      TextView textView= (TextView) view.findViewById(R.id.textView); 
      textView.setText(getPageTitle(position)); 

      ImageView imageView = (ImageView) view.findViewById(R.id.imageView); 
      imageView .setImageResource(tabIcons[position]); 

      return view; 
     } 

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

    } 
    private void changeTabsFont() { 
     Typeface mTypeface = Typeface.createFromAsset(getAssets(), "IRANSans_Bold.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(mTypeface, Typeface.BOLD); 
       } 
      } 
     } 
    } 
    //Caligraphy Library 
    @Override 
    protected void attachBaseContext(Context newBase) { 
     super.attachBaseContext(CalligraphyContextWrapper.wrap(newBase)); 
    } 
} 

и это мой customxml файл:

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:orientation="vertical" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent"> 

    <ImageView 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" 
     android:id="@+id/imageView" /> 

    <TextView 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" 
     android:text="New Text" 
     android:textSize="@dimen/text_size" 
     android:gravity="center" 
     fontPath="@string/fontsIran" 
     android:id="@+id/textView" /> 
</LinearLayout> 
+0

У вас есть собственный шрифт в 'tf', но где вы устанавливаете его для вкладки? –

+0

Я не вижу, где вы инициализируете поле 'context', из которого вы получаете' LayoutInflater' из 'getTabView()'. –

+0

@MikeM. что вы подразумеваете под контекстным полем в макете надувателя – Sandro

ответ

0

использовать эту библиотеку.

добавить это в файл build.gradle

// fonts 
compile 'in.workarounds.typography:typography:0.0.8' 

затем изменить TextView к,

<in.workarounds.typography.TextView 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:text="New Text" 
    android:textSize="@dimen/text_size" 
    android:gravity="center" 
    fontPath="@string/fontsIran" 
    android:id="@+id/textView" 
    app:font_name="Lato" 
    app:font_variant="Light"/> 

где шрифт Lato-Light .which расположен в assets/fonts/Lato-Light.ttf