【问题标题】:Icon not showing in FloatingActionButton after changed programmatically以编程方式更改后图标未显示在 FloatingActionButton 中
【发布时间】:2019-02-03 18:47:17
【问题描述】:

我有一个AppCompatActivity 和一个TabLayout 和一个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; 
            }
        }
    });

之前:

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

预期:

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

【问题讨论】:

  • 嗯,我也遇到了同样的问题。我试过 invalidate() 但这没有用。如果我让它工作,我会更新。你成功了吗?

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


【解决方案1】:

我也遇到了这个问题,我通过调用 hide 方法解决了

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

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

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

【讨论】:

    【解决方案2】:

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

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

    【讨论】:

    • 谢谢。库升级 (com.google.android.material:material:1.2.0-alpha02) 为我解决了这个问题。
    • 我以前有api 'com.google.android.material:material:1.2.0-alpha05' 。我不得不降级到api 'com.google.android.material:material:1.1.0-alpha05',现在它显示了。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-08-17
    • 2010-10-16
    • 1970-01-01
    • 2014-07-13
    • 1970-01-01
    • 2021-08-13
    • 1970-01-01
    相关资源
    最近更新 更多