FlycoTabLayout icon indicating copy to clipboard operation
FlycoTabLayout copied to clipboard

解决SlidingTabLayout第一次进入界面时,title字体不能设置为加粗的问题

Open HeJiaomy opened this issue 6 years ago • 5 comments

方法一:下载源码=== 需要修改SlidingTabLayout.updateTabStyles()函数中的源码(加**的部分)

` private void updateTabStyles() { ......

        if (mTextBold == TEXT_BOLD_BOTH) {
            tv_tab_title.getPaint().setFakeBoldText(true);
        } else if (mTextBold == TEXT_BOLD_NONE) {
            tv_tab_title.getPaint().setFakeBoldText(false);
        } **else if (mTextBold == TEXT_BOLD_WHEN_SELECT) {
            tv_tab_title.getPaint().setFakeBoldText(mCurrentTab == i);**
        }
    }
}

}`

方法二:不用下载源码===

步骤1:在初始化时将第一个tab的title设置为粗体

binding.viewPager.setAdapter(tabAdapter); binding.slidingTabLayout.setViewPager(binding.viewPager); //第一次进入时将第一个tab设置为粗体 TextView titleView = binding.slidingTabLayout.getTitleView(0); titleView.setTypeface(Typeface.defaultFromStyle(Typeface.BOLD));

步骤2:在ViewPager的切换监听中再将第一个tab的title设置为正常

` binding.viewPager.addOnPageChangeListener(new ViewPager.OnPageChangeListener() { @Override public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {

        }

        @Override
        public void onPageSelected(int position) {

            LogUtils.e("当前tab2::::"+position);

            //切换时将第一个tab字体设置为正常情况
            TextView titleView = binding.slidingTabLayout.getTitleView(0);
            titleView.setTypeface(Typeface.defaultFromStyle(Typeface.NORMAL));
            //设置为粗体
            binding.slidingTabLayout.setTextBold(1);
        }

        @Override
        public void onPageScrollStateChanged(int state) {

        }
    });`

注意:如果要修改indicator的高度,需要将SlidingTabLayout高度设置成wrap_content

HeJiaomy avatar Oct 14 '19 12:10 HeJiaomy

纠正一下方法二,这种修改只在title只有两个的时候有效,如果有多个,就有bug。现在可以在onPageSelected(int position)方法内修改,先将所有title字体设置为正常,再将当前title设置为粗体。代码如下: ` @Override public void onPageSelected(int position) {

        //切换时将所有tab字体设置为正常
            int length = titles.length;
            for (int i = 0; i < length; i++) {
                TextView titleView = binding.slidingTabLayout.getTitleView(i);
                titleView.setTypeface(Typeface.defaultFromStyle(Typeface.NORMAL));
            }
            
          //将当前选中的tab设置为粗体
            TextView currentView = binding.slidingTabLayout.getTitleView(position);
            currentView.setTypeface(Typeface.defaultFromStyle(Typeface.BOLD));
        }

`

HeJiaomy avatar Oct 22 '19 01:10 HeJiaomy

切换viewpager时,title字体也不能加粗?

goodluckier avatar Nov 25 '19 10:11 goodluckier

切换viewpager时,title字体也不能加粗?

可以的

HeJiaomy avatar Nov 29 '19 02:11 HeJiaomy

通过反射调用updateTabSelection(position)这个方法,会更加简单一点来解决这个bug,我贴一下代码 try { val updateTabMethod = tabLayout?.javaClass?.getDeclaredMethod("updateTabSelection", Int::class.java) updateTabMethod?.isAccessible = true updateTabMethod?.invoke(tabLayout!!, 0) } catch(e: Exception) { }

datayes-dev avatar Jan 12 '21 03:01 datayes-dev

//TabLayout默认选中第一个 这个地方要注意由于第一个有选中字体加粗效果 第三方框架BUG如果直接选中0位没有加粗效果 slidingTabLayout.setCurrentTab(1); slidingTabLayout.setCurrentTab(0);

    这应该是最简单的办法

shuaiyinoo avatar Nov 24 '21 09:11 shuaiyinoo