首页 > 解决方案 > 以编程方式更改后图标未显示在 FloatingActionButton 中

问题描述

我有一个AppCompatActivitywith aTabLayout和 aFloatingActionButton我根据当前显示的选项卡更改它的图标。

FloatingActionButton当我以编程方式更改using setImageDrawableor的可绘制对象时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; 
            }
        }
    });

前:

前

在我以编程方式将其更改为“加号”矢量可绘制对象后:

结果

预期的:

预期的

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

标签: androidfloating-action-buttonandroid-vectordrawable

解决方案


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

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

我曾尝试过.invalidate(),但没有奏效。这似乎是切换片段时的问题。我在使用 Navigation AndroidX 组件时体验过它。

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


推荐阅读