【问题标题】:How can i add icons to the tabs using "florent37/MaterialViewPager"如何使用“florent37/MaterialViewPager”将图标添加到选项卡
【发布时间】:2015-08-12 01:00:24
【问题描述】:

我正在使用Florent37-MateriralViewPager 库它运行良好,但我的要求是选项卡上的图标。现在我只使用文本。 库的 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 标签栏。谢谢。 。想添加这样的图标。

【问题讨论】:

    标签: android material-design


    【解决方案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);
    }
    

    【讨论】:

    • 我应该在 Florent 的 MaterialViewPager 的 MainActivity 中写这个吗?
    • 复制我给你的链接里的数据!把它贴在某个地方!在那里找到我提到的两个函数( addTab , notifyDataSetChanged )并将它们替换为我为您提供的内容
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-10-02
    • 1970-01-01
    相关资源
    最近更新 更多