通过编程更改后,图标未显示在FloatingActionButton中

时间:2019-02-03 18:47:17

标签: android floating-action-button android-vectordrawable

我有一个AppCompatActivity和一个TabLayout和一个FloatingActionButton,我根据当前显示的标签来更改其图标。

当我使用FloatingActionButtonsetImageDrawable以编程方式更改setImageResource的可绘制对象时,不会显示新图标,只是按钮的空白背景。

奇怪的是,如果我以编程方式更改了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

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

2 个答案:

答案 0 :(得分:1)

这是一个已知的错误:https://issuetracker.google.com/issues/117476935

只需升级到com.google.android.material:material:1.1.0-beta02,即可解决此问题。

答案 1 :(得分:0)

我也遇到了这个问题,我通过添加对hide方法的调用来解决了

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

我尝试过.invalidate(),但是没有用。切换片段时这似乎是一个问题。我在使用Navigation AndroidX组件时遇到了这种情况。

我认为这不是最好的解决方案,但我尝试了很多,但只有这样才能奏效-没有闪烁效果。