在阅读了stackoverflow关于floatingactionbutton的各种问题后,比如这里的Android changing Floating Action Button color,这是关于它的最完整的问题之一,并尝试了各种建议,我正在使用fab超过应用程序中的片段compileSdkVersion 33
,targetSdkVersion 33
,implementation 'androidx.appcompat:appcompat:1.5.1'
,加上我解决了材料组件implementation 'com.google.android.material:material:1.7.0'
的最新版本,在片段xml中我解决为:
<com.google.android.material.floatingactionbutton.FloatingActionButton
xmlns:app="http://schemas.android.com/apk/res-auto"
android:id="@+id/fab"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="bottom|end"
android:layout_margin="16dp"
app:srcCompat="@android:drawable/ic_popup_sync"
app:tint="@color/white"
app:backgroundTint="@color/fab_enabled"/>
在代码中,我尝试了各种方法,正如您在注解代码行中所看到的,但似乎fab不会将背景颜色更改为禁用,即使状态对应为禁用:
FloatingActionButton fab = (FloatingActionButton) view.findViewById(R.id.fab);
fab.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
fab.setEnabled(false);
//fab.getBackground().set(getContext().getColor(R.color.fab_disabled));
//fab.setBackgroundTintList(ColorStateList.valueOf(getContext().getColor(R.color.fab_disabled)));
//fab.setBackgroundColor( getContext().getColor(R.color.fab_disabled) );
fab.getBackground().mutate().setTint(getContext().getColor(R.color.fab_disabled));
这可能取决于材质版本吗?或者可能与显示背景颜色变化所需的一些刷新有关?或者甚至是因为我使用了标准的java按钮(@android:drawable/ic_popup_sync
),而不是自定义按钮?...我也尝试过使用选择器代替backgroundTint中的颜色,使其根据当前状态自动变化,但它不起作用...
编辑2023年1月11日:
我尝试将列表视图和浮动操作按钮合并到RelativeLayout中,以尝试查看列表视图是否被清除,就像我调用adapter.clear()和adapter.notifyDataSetChanged()一样:
<?xml version="1.0" encoding="utf-8"?>
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/fr_myfragment"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".MyFragment">
<RelativeLayout
android:layout_width="match_parent"
android:layout_height="match_parent">
<!-- TODO: Update blank fragment layout -->
<ListView
android:id="@+id/myfragment_list"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_weight="1"
android:layout_margin="5dp" />
<com.google.android.material.floatingactionbutton.FloatingActionButton
android:id="@+id/fab"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentEnd="true"
android:layout_alignParentBottom="true"
android:layout_gravity="bottom|end"
android:layout_margin="16dp"
android:backgroundTint="@color/fab_colors"
android:src="@android:drawable/ic_popup_sync" />
</RelativeLayout>
</FrameLayout>
但是一旦我点击了fab按钮,列表视图就不会在进行新的项目搜索之前清除,也不会隐藏fab按钮本身...我还尝试用setOnTouchListener更改fab按钮的setOnClickListener,看看fab的行为是否可以更改,但不起作用...我真的被卡住了...任何方向都将不胜感激...谢谢!
2条答案
按热度按时间pbgvytdp1#
请尝试此代码。
这里
this
就是context
6kkfgxo02#
最后经过一些测试,我发现把代码放在一个异步的可运行线程中传递fab按钮,这样,一旦它完成了,我就可以重新启用按钮了。无论如何,感谢大家的建议!