如何使用“florent37 / MaterialViewPager”向标签添加图标

时间:2015-05-29 08:32:57

标签: android material-design

我正在使用Florent37-MateriralViewPager库它运行良好,但我的要求是选项卡上的图标。现在我只使用文字。 Library的MainActivity.java如下所示。

 mViewPager = (MaterialViewPager) findViewById(R.id.materialViewPager);
    mViewPager.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            Toast.makeText(MainActivity.this, "T", Toast.LENGTH_LONG).show();
        }
    });
    toolbar = mViewPager.getToolbar();
    mDrawer = (DrawerLayout) findViewById(R.id.drawer_layout);

    if (toolbar != null) {
        setSupportActionBar(toolbar);

        final ActionBar actionBar = getSupportActionBar();
        if (actionBar != null) {
            actionBar.setDisplayHomeAsUpEnabled(true);
            actionBar.setDisplayShowHomeEnabled(true);
            actionBar.setDisplayShowTitleEnabled(true);
            actionBar.setDisplayUseLogoEnabled(true);
            actionBar.setHomeButtonEnabled(true);
        }
    }

    mDrawerToggle = new ActionBarDrawerToggle(this, mDrawer, 0, 0);
    mDrawer.setDrawerListener(mDrawerToggle);


    mViewPager.getViewPager().setAdapter(new FragmentStatePagerAdapter(getSupportFragmentManager()) {

        int oldPosition = -1;

        @Override
        public Fragment getItem(int position) {
            switch (position) {
                case 0:
                    return HotOffers.newInstance();
                case 1:
                    return TwentyOffers.newInstance();
                case 2:
                    return Brands.newInstance();
                case 3:
                    return Category.newInstance();
                default:
                    return RecyclerViewFragment.newInstance();
            }
        }

        @Override
        public void setPrimaryItem(ViewGroup container, int position, Object object) {
            super.setPrimaryItem(container, position, object);

            //only if position changed
            if (position == oldPosition)
                return;
            oldPosition = position;

            int color = 0;
            String imageUrl = "http://myimage.jpg";
            switch (position) {
                case 0:
                    //imageUrl = arrayList.get(position);
                    color = getResources().getColor(R.color.cyan);
                    break;
                case 1:
                    //imageUrl = arrayList.get(position);
                    color = getResources().getColor(R.color.cyan);
                    break;
                case 2:
                    //imageUrl = arrayList.get(position);
                    color = getResources().getColor(R.color.cyan);
                    break;
                case 3:
                    //imageUrl = arrayList.get(position);
                    color = getResources().getColor(R.color.cyan);
                    break;
            }

            final int fadeDuration = 500;
            mViewPager.setImageUrl(imageUrl, fadeDuration);
            mViewPager.setColor(color, fadeDuration);

        }

        @Override
        public int getCount() {
            return 4;
        }

        @Override
        public CharSequence getPageTitle(int position) {
            switch (position) {
                case 0:
                    return "Top Twenty";
                case 1:
                    return "Just For You";
                case 2:
                    return "Brands";
                case 3:
                    return "Category";

            }
            return "";
        }
    });
    mViewPager.getViewPager().setOffscreenPageLimit(mViewPager.getViewPager().getAdapter().getCount());
    mViewPager.getPagerTitleStrip().setViewPager(mViewPager.getViewPager());

    mViewPager.getViewPager().setCurrentItem(0);
}

@Override
public boolean onCreateOptionsMenu(Menu menu) {

    getMenuInflater().inflate(R.menu.menu_main, menu);
    return true;
}

@Override
public boolean onOptionsItemSelected(MenuItem item) {

    int id = item.getItemId();
    switch (id) {


        default:
            return super.onOptionsItemSelected(item);
    }
}

@Override
protected void onPostCreate(Bundle savedInstanceState) {
    super.onPostCreate(savedInstanceState);
    mDrawerToggle.syncState();
}

请帮助我如何在MaterialViewPager标签栏中添加图标。谢谢。 enter image description here。想添加这样的图标。 enter image description here

1 个答案:

答案 0 :(得分:1)

首先从

复制整个代码

https://github.com/jpardogo/PagerSlidingTabStrip/blob/master/library/src/com/astuetz/PagerSlidingTabStrip.java

并制作自定义标签类。

那么你应该改变 notifyDataSetChanged()类并在FOR LOOP中实现您喜欢的任何内容! 这是每个视图膨胀并添加到标签条

的地方

编辑:

你做这样的事情

    public void notifyDataSetChanged() {
    tabsContainer.removeAllViews();
    tabCount = pager.getAdapter().getCount();
    View tabView;
    for (int i = 0; i < tabCount; i++) {

        tabView = LayoutInflater.from(getContext()).inflate(YOUR_CUSTOM_LAYOUT, this, false);
        CharSequence title = pager.getAdapter().getPageTitle(i);
        addTab(i, title,icons[i], tabView);
    }

    updateTabStyles();
    getViewTreeObserver().addOnGlobalLayoutListener(new OnGlobalLayoutListener() {

        @SuppressWarnings("deprecation")
        @SuppressLint("NewApi")
        @Override
        public void onGlobalLayout() {

            if (Build.VERSION.SDK_INT < Build.VERSION_CODES.JELLY_BEAN) {
                getViewTreeObserver().removeGlobalOnLayoutListener(this);
            } else {
                getViewTreeObserver().removeOnGlobalLayoutListener(this);
            }
        }
    });
}


private void addTab(final int position, CharSequence title,int drawableId, View tabView) {
    TextView textView = (TextView) tabView.findViewById(TEXTVIEW_IN_CUSTOMLAYOUT);
    ImageView imageView = (ImageView) tabView.findViewById(IMAGEVIEW_IN_CUSTOMLAYOUT);
    if (textView != null) {
        if (title != null) textView.setText(title);
    }

    if (imageView != null) {
        if (drawableId != 0) imageView.setIamgeResource(drawableId);
    }

    tabView.setFocusable(true);
    tabView.setOnClickListener(new OnClickListener() {
        @Override
        public void onClick(View v) {
            if (pager.getCurrentItem() != position) {
                View tab = tabsContainer.getChildAt(pager.getCurrentItem());
                notSelected(tab);
                pager.setCurrentItem(position);
            } else if (tabReselectedListener != null) {
                tabReselectedListener.onTabReselected(position);
            }
        }
    });

    tabsContainer.addView(tabView, position, shouldExpand ? expandedTabLayoutParams : defaultTabLayoutParams);
}