程序改变后,FloatingActionButton中的图标未显示

3
我有一个带有TabLayoutFloatingActionButtonAppCompatActivity,根据当前显示的选项卡更改FloatingActionButton的图标。当我使用setImageDrawablesetImageResource动态更改FloatingActionButton的drawable时,新图标不会显示出来,只会看到按钮的空白背景。奇怪的是,如果我在程序中更改了FloatingActionButton的图标后隐藏并再次显示它,它就可以正常显示。这是我更改图标的代码部分:
mViewPager.addOnPageChangeListener(new TabLayout.TabLayoutOnPageChangeListener(tabLayout) {
        @Override
        public void onPageSelected(int position) {
            super.onPageSelected(position);
            switch (position) {
                case 0: 
                    floatingActionButton.setImageDrawable(ContextCompat.getDrawable(mMainActivity, R.drawable.ic_save_24dp));
                    if (!floatingActionButton.isShown()) floatingActionButton.show(); 
                    mNavigationView.getMenu().getItem(1).setChecked(true);
                    break;
                case 1: 
                    floatingActionButton.setImageDrawable(ContextCompat.getDrawable(mMainActivity, R.drawable.ic_add_24dp));
                    if (!floatingActionButton.isShown()) floatingActionButton.show(); 
                    mNavigationView.getMenu().getItem(2).setChecked(true);
                    break;
                case 2: 
                    floatingActionButton.hide(); 
                    mNavigationView.getMenu().getItem(3).setChecked(true);
                    break; 
            }
        }
    });

之前的样子:

before

在我通过编程将它更改为“加号”矢量图后:

result

期望的效果:

expected

所以,我的问题是:这是什么原因造成的,如何解决?


嗯,我遇到了同样的问题。我尝试了invalidate(),但没有起作用。如果我解决了,我会更新的。你解决了吗? - d4c0d312
2个回答

4

我也遇到过这个问题,通过添加调用隐藏方法来解决了。

 mFloatingActionButton.setImageDrawable(getDrawable(R.drawable.default_fab_icon));
 mFloatingActionButton.hide();
 mFloatingActionButton.show();

我曾经尝试使用.invalidate(),但是没有起作用。这似乎是在切换片段时出现的问题。我在使用Navigation AndroidX组件时遇到了这个问题。
我不认为这是最好的解决方案,但我尝试了很多方法,只有这个有效-没有闪烁效果。

3

谢谢。库升级(com.google.android.material:material:1.2.0-alpha02)解决了我的问题。 - FractalBob
我以前使用的是 api 'com.google.android.material:material:1.2.0-alpha05'。但是我不得不降级到 api 'com.google.android.material:material:1.1.0-alpha05',现在它可以正常显示了。 - Cflux

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接