java SDK 33上的浮动操作按钮在片段上

daolsyd0  于 2023-01-19  发布在  Java
关注(0)|答案(2)|浏览(128)

在阅读了stackoverflow关于floatingactionbutton的各种问题后,比如这里的Android changing Floating Action Button color,这是关于它的最完整的问题之一,并尝试了各种建议,我正在使用fab超过应用程序中的片段compileSdkVersion 33targetSdkVersion 33implementation '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的行为是否可以更改,但不起作用...我真的被卡住了...任何方向都将不胜感激...谢谢!

pbgvytdp

pbgvytdp1#

请尝试此代码。

fab.backgroundTintList = ColorStateList.valueOf(ContextCompat.getColor(this, R.color.fab_disabled))

这里this就是context

6kkfgxo0

6kkfgxo02#

最后经过一些测试,我发现把代码放在一个异步的可运行线程中传递fab按钮,这样,一旦它完成了,我就可以重新启用按钮了。无论如何,感谢大家的建议!

相关问题