以编程方式更改后,图标未显示在 FloatingActionButton 中
Icon not showing in FloatingActionButton after changed programmatically
我有一个 AppCompatActivity
和一个 TabLayout
和一个 FloatingActionButton
,我根据当前显示的选项卡更改它的图标。
当我使用 setImageDrawable
或 setImageResource
以编程方式更改 FloatingActionButton
的可绘制对象时,新图标没有显示,只有按钮的空白背景。
奇怪的是,如果我在以编程方式更改它的图标后隐藏并显示 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;
}
}
});
之前:
在我以编程方式将其更改为 "plus" 矢量可绘制对象后:
预计:
所以,我的问题是:是什么原因造成的,如何解决?
我也有这个问题,我通过添加对隐藏方法的调用解决了
mFloatingActionButton.setImageDrawable(getDrawable(R.drawable.default_fab_icon));
mFloatingActionButton.hide();
mFloatingActionButton.show();
我试过 .invalidate()
但没用。这似乎是切换片段时的问题。我在使用 Navigation AndroidX 组件时体验到了它。
我认为这不是最好的解决方案,但我尝试了很多,只有这个有效 - 没有闪烁效果。
这是一个已知错误:https://issuetracker.google.com/issues/117476935
只需升级到 com.google.android.material:material:1.1.0-beta02
即可解决此问题。
我有一个 AppCompatActivity
和一个 TabLayout
和一个 FloatingActionButton
,我根据当前显示的选项卡更改它的图标。
当我使用 setImageDrawable
或 setImageResource
以编程方式更改 FloatingActionButton
的可绘制对象时,新图标没有显示,只有按钮的空白背景。
奇怪的是,如果我在以编程方式更改它的图标后隐藏并显示 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;
}
}
});
之前:
在我以编程方式将其更改为 "plus" 矢量可绘制对象后:
预计:
所以,我的问题是:是什么原因造成的,如何解决?
我也有这个问题,我通过添加对隐藏方法的调用解决了
mFloatingActionButton.setImageDrawable(getDrawable(R.drawable.default_fab_icon));
mFloatingActionButton.hide();
mFloatingActionButton.show();
我试过 .invalidate()
但没用。这似乎是切换片段时的问题。我在使用 Navigation AndroidX 组件时体验到了它。
我认为这不是最好的解决方案,但我尝试了很多,只有这个有效 - 没有闪烁效果。
这是一个已知错误:https://issuetracker.google.com/issues/117476935
只需升级到 com.google.android.material:material:1.1.0-beta02
即可解决此问题。