2016-12-10 9 views
0

カスタムフォントを下のコードからタイトル(「タブアイテム1」、「タブアイテム2」、「タブアイテム3」)に設定しようとしています。私はAndroid StudioやJavaにはまったく初心者で、インターネット上で行われていた種類の素材を使って学習しています。タブのタイトルにAndroidカスタムフォントを設定する

アセットフォルダに "abc.ttf"という名前のフォントがあるとします。どのようにしてタブタイトルのフォントを変更できますか?以下は私のTabFragment.java

import android.graphics.Typeface; 
import android.os.Bundle; 
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.ViewPager; 
import android.support.v7.widget.AppCompatTextView; 
import android.view.LayoutInflater; 
import android.view.View; 
import android.view.ViewGroup; 
import android.widget.TextView; 


public class TabFragment extends Fragment { 

    TabLayout mTabLayout; 
    ViewPager mViewPager; 
    private static final int int_items = 3; 

    @Nullable 
    @Override 
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { 
     /** 
     *Inflate tab_layout and setup Views. 
     */ 
     View x = inflater.inflate(R.layout.tabbed_layout, null); 
     mTabLayout = (TabLayout) x.findViewById(R.id.tabs); 
     mViewPager = (ViewPager) x.findViewById(R.id.viewpager); 

     /** 
     *Set an Apater for the View Pager 
     */ 
     mViewPager.setAdapter(new MyAdapter(getChildFragmentManager())); 

     /** 
     * Now , this is a workaround , 
     * The setupWithViewPager dose't works without the runnable . 
     * Maybe a Support Library Bug . 
     */ 

     mTabLayout.post(new Runnable() { 
      @Override 
      public void run() { 
       mTabLayout.setupWithViewPager(mViewPager); 
      } 
     }); 

     return x; 

    } 

    class MyAdapter extends FragmentPagerAdapter { 

     public MyAdapter(FragmentManager fm) { 
      super(fm); 
     } 

     /** 
     * Return fragment with respect to Position . 
     */ 

     @Override 
     public Fragment getItem(int position) { 
      switch (position) { 
       case 0: 
        return new TabOneFragment(); 
       case 1: 
        return new TabTwoFragment(); 
       case 2: 
        return new TabThreeFragment(); 
      } 
      return null; 
     } 

     @Override 
     public int getCount() { 

      return int_items; 

     } 

     /** 
     * This method returns the title of the tab according to the position. 
     */ 



     @Override 
     public CharSequence getPageTitle(int position) { 

      switch (position) { 
       case 0: 

        return "Tab Item 1"; 
       case 1: 
        return "Tab Item 2"; 
       case 2: 
        return "Tab Item 3"; 
      } 
      return null; 
     } 
    } 

} 

、ここで私のtabbed_layout.xml

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


<android.support.design.widget.TabLayout 
    android:id="@+id/tabs" 
    app:tabGravity="fill" 
    app:tabMode="fixed" 
    android:background="@color/white" 
    app:tabIndicatorColor="@color/colorPrimary" 
    app:tabSelectedTextColor="@color/colorPrimary" 
    app:tabTextColor="@color/black" 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" /> 

<android.support.v4.view.ViewPager 
    android:id="@+id/viewpager" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent"> 

</android.support.v4.view.ViewPager> 


</LinearLayout> 

答えて

1

xmlでこのCustomTablayoutを使用するとTablayoutから車ますCustomTabLayoutクラスを作成しているがありますTablayout

の代わりに
import android.content.Context; 
import android.graphics.Typeface; 
import android.support.design.widget.TabLayout; 
import android.util.AttributeSet; 
import android.view.View; 
import android.view.ViewGroup; 
import android.widget.TextView; 

public class CustomTabLayout extends TabLayout { 
    private Typeface mTypeface; 

    public CustomTabLayout(Context context) { 
     super(context); 
     init(); 
    } 

    public CustomTabLayout(Context context, AttributeSet attrs) { 
     super(context, attrs); 
     init(); 
    } 

    public CustomTabLayout(Context context, AttributeSet attrs, int defStyleAttr) { 
     super(context, attrs, defStyleAttr); 
     init(); 
    } 

    private void init() { 
     mTypeface = Typeface.createFromAsset(getContext().getAssets(), "your fonts"); // here you will provide fully qualified path for fonts 
    } 

    @Override 
    public void addTab(Tab tab) { 
     super.addTab(tab); 

     ViewGroup mainView = (ViewGroup) getChildAt(0); 
     ViewGroup tabView = (ViewGroup) mainView.getChildAt(tab.getPosition()); 

     int tabChildCount = tabView.getChildCount(); 
     for (int i = 0; i < tabChildCount; i++) { 
      View tabViewChild = tabView.getChildAt(i); 
      if (tabViewChild instanceof TextView) { 
       ((TextView) tabViewChild).setTypeface(mTypeface, Typeface.NORMAL); 
      } 
     } 
    } 

} 

これは、XMLで行う必要があります。

<yourpackagename.CustomTabLayout 
    android:id="@+id/tabs" 
    app:tabGravity="fill" 
    app:tabMode="fixed" 
    android:background="@color/white" 
    app:tabIndicatorColor="@color/colorPrimary" 
    app:tabSelectedTextColor="@color/colorPrimary" 
    app:tabTextColor="@color/black" 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" /> 

ここでEDIT

このカスタムクラス

package com.ifavaz.kulli; 

/** 
* Created by ifawaz on 12/11/16. 
*/ 

import android.content.Context; 
import android.graphics.Typeface; 
import android.support.design.widget.TabLayout; 
import android.support.v4.view.PagerAdapter; 
import android.support.v4.view.ViewPager; 
import android.support.v7.widget.AppCompatTextView; 
import android.util.AttributeSet; 
import android.view.View; 
import android.view.ViewGroup; 
import android.widget.TextView; 

public class CustomTabLayout extends TabLayout { 
    private Typeface mTypeface; 

    public CustomTabLayout(Context context) { 
     super(context); 
     init(); 
    } 

    public CustomTabLayout(Context context, AttributeSet attrs) { 
     super(context, attrs); 
     init(); 
    } 

    public CustomTabLayout(Context context, AttributeSet attrs, int defStyleAttr) { 
     super(context, attrs, defStyleAttr); 
     init(); 
    } 

    private void init() { 
     mTypeface = Typeface.createFromAsset(getContext().getAssets(), "fonts/AmazingDayEveryday.ttf"); // here you will provide fully qualified path for fonts 
    } 

    @Override 
    public void setupWithViewPager(ViewPager viewPager) { 
     super.setupWithViewPager(viewPager); 

     if (mTypeface != null) { 
      this.removeAllTabs(); 
      ViewGroup slidingTabStrip = (ViewGroup) getChildAt(0); 

      PagerAdapter adapter = viewPager.getAdapter(); 

      for (int i = 0, count = adapter.getCount(); i < count; i++) { 
       Tab tab = this.newTab(); 
       this.addTab(tab.setText(adapter.getPageTitle(i))); 
       AppCompatTextView view = (AppCompatTextView) ((ViewGroup) slidingTabStrip.getChildAt(i)).getChildAt(1); 
       view.setTypeface(mTypeface, Typeface.NORMAL); 
      } 
     } 
    } 

} 

スクリーンショットenter image description here

を働いている私は、これは代わりに、XMLでこのCustomTablayoutを使用すると」あなた

+0

役立つことを願っていますTablayoutの ".... H私はそれを行うのですか? –

+0

私の回答を編集しました –

+0

まだ動作しません。私はこれを理解しようとしています。 XMLではandroid:id = "@ + id/tabs"は "tabs"を指します。 CustomTabLayout.javaでは、 "public void addTab(Tab tab)" ...最後の "tab"は "tabs"ですか?あなたのコードは正しいですか? –

関連する問題