我如何添加使用图标标签" florent37 / MaterialViewPager"图标、标签、QUOT、MaterialViewPager

2023-09-07 13:46:52 作者:Estrus(动情)

我使用 Florent37-MateriralViewPager 库它运作良好,但我的需要量是在标签上的图标。现在我只是仅使用文本。图书馆的MainActivity.java是如下图所示。

I am using Florent37-MateriralViewPager library It is working well but my requirment is Icons on the tabs. For now I just using text only. Library's MainActivity.java is as below.

 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 = "https://m.xsw88.com/allimgs/daicuo/20230907/5716.png.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标签bar.Thanks。。想添加图标这样。

Please help me how can i add icons to the MaterialViewPager tab bar.Thanks. . Would like to add icons like this.

推荐答案

首先复制整个code从

first of all copy the whole code from

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

和创建自定义选项卡类。

and make a custom tab class.

那么你应该改变notifyDataSetChanged()类,并实现你在for循环什么都喜欢!这正是每个视图变得膨胀,并添加到标签条

then you should change notifyDataSetChanged() class and implement what ever you like in the FOR LOOP ! that is where each view become inflated and added to tab Strip

编辑:

您做这样的事情。

    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);
}