尝试在ViewPager中使用setTypeface

时间:2016-07-28 15:00:06

标签: android android-studio android-typeface

 public class HelpSettingsFragment extends Fragment {

    /**
     * The pager widget, which handles animation and allows swiping horizontally to access previous
     * and next wizard steps.
     */
    private ViewPager mPager;

    /**
     * The pager adapter, which provides the pages to the view pager widget.
     */
    private PagerAdapter mPagerAdapter;

    Typeface champagneRegularFont;

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
        View rootView = inflater.inflate(R.layout.tutorial, container, false);

        ActionBar actionBar = ((AppCompatActivity) getActivity()).getSupportActionBar();
        SpannableString s = new SpannableString("Help");
        s.setSpan(new TypefaceSpan(getContext(), "Candy.ttf"), 0, s.length(), Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
        actionBar.setTitle(s);

        champagneRegularFont = Typeface.createFromAsset(getActivity().getAssets(),"fonts/Champagne & Limousines.ttf");

        // Instantiate a ViewPager and a PagerAdapter.
        mPager = (ViewPager) rootView.findViewById(R.id.vpPager);
        mPagerAdapter = new CustomPagerAdapter(getContext());
        mPager.setAdapter(mPagerAdapter);

        return rootView;
    }

    /**
     * A simple pager adapter that represents 5 ScreenSlidePageFragment objects, in
     * sequence.
     */
    public class CustomPagerAdapter extends PagerAdapter {

        private Context mContext;

        public CustomPagerAdapter(Context context) {
            mContext = context;
        }

        @Override
        public Object instantiateItem(ViewGroup collection, int position) {
            ModelObject modelObject = ModelObject.values()[position];
            LayoutInflater inflater = LayoutInflater.from(mContext);
            ViewGroup layout = (ViewGroup) inflater.inflate(modelObject.getLayoutResId(), collection, false);
            collection.addView(layout);

            return layout;
        }

        @Override
        public void destroyItem(ViewGroup collection, int position, Object view) {
            collection.removeView((View) view);
        }

        @Override
        public int getCount() {
            return ModelObject.values().length;
        }

        @Override
        public boolean isViewFromObject(View view, Object object) {
            return view == object;
        }

        @Override
        public CharSequence getPageTitle(int position) {
            ModelObject customPagerEnum = ModelObject.values()[position];

            return mContext.getString(customPagerEnum.getTitleResId());
        }

    }

    public enum ModelObject {

        FIRST(R.string.blue, R.layout.tutorial_1),
        SECOND(R.string.red, R.layout.tutorial_2),
        THIRD(R.string.green, R.layout.tutorial_3);

        private int mTitleResId;
        private int mLayoutResId;

        ModelObject(int titleResId, int layoutResId) {
            mTitleResId = titleResId;
            mLayoutResId = layoutResId;
        }

        public int getTitleResId() {
            return mTitleResId;
        }

        public int getLayoutResId() {
            return mLayoutResId;
        }

    }

}

我正在使用ViewPager,因此用户可以滚动浏览3种不同的布局。我正在尝试为某些TextViewButton设置自定义字体。有谁知道我在哪里实例化对象并能够通过setTypeface(champagneRegularFont)设置自定义字体?

编辑:另外,我会在同一个地方添加onClickListeners吗?

不再需要知道如何实现onClickListeners,因为我已将其替换为xml文件中的onClick方法,并在我的activity类中声明了该方法。

1 个答案:

答案 0 :(得分:1)

您正在将布局膨胀为

ViewGroup layout = (ViewGroup)   
inflater.inflate(modelObject.getLayoutResId(), collection, false);

现在设置您在 onCreateView()上初始化的typeFace,如下所示,

TextView textView=(TextView)layout.findViewById(R.id.textView);
textView.setTypeface(champagneRegularFont);