You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Material Design 3 SearchView展开时FloatingActionButton未隐藏问题求助

解决Material Design 3 SearchView展开时隐藏FloatingActionButton的问题

方案一:通过SearchView状态监听实现(Activity代码)

在Activity中给SearchView添加状态监听器,监听展开/折叠事件,控制FloatingActionButton的显示与隐藏:

Kotlin 代码示例

class MainActivity2 : AppCompatActivity() {
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.your_layout_name)
        
        val searchView = findViewById<SearchView>(R.id.search_view)
        val fab = findViewById<FloatingActionButton>(R.id.floating_action_button)
        
        searchView.addOnSearchViewListener(object : SearchView.OnSearchViewListener {
            override fun onSearchViewShown() {
                fab.hide()
            }

            override fun onSearchViewClosed() {
                fab.show()
            }
        })
        
        // 关联SearchBar与SearchView,确保状态监听生效
        val searchBar = findViewById<SearchBar>(R.id.search_bar)
        searchBar.setupWithSearchView(searchView)
    }
}

Java 代码示例

public class MainActivity2 extends AppCompatActivity {
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.your_layout_name);
        
        SearchView searchView = findViewById(R.id.search_view);
        FloatingActionButton fab = findViewById(R.id.floating_action_button);
        
        searchView.addOnSearchViewListener(new SearchView.OnSearchViewListener() {
            @Override
            public void onSearchViewShown() {
                fab.hide();
            }

            @Override
            public void onSearchViewClosed() {
                fab.show();
            }
        });
        
        SearchBar searchBar = findViewById(R.id.search_bar);
        searchBar.setupWithSearchView(searchView);
    }
}

方案二:通过CoordinatorLayout Behavior实现(XML+自定义Behavior)

通过自定义CoordinatorLayout Behavior,让FAB与SearchView的状态联动,无需在Activity中编写监听代码:

  1. 创建自定义Behavior类
class SearchViewFabBehavior(context: Context, attrs: AttributeSet) : FloatingActionButton.Behavior(context, attrs) {
    override fun layoutDependsOn(parent: CoordinatorLayout, child: FloatingActionButton, dependency: View): Boolean {
        return dependency is SearchView
    }

    override fun onDependentViewChanged(parent: CoordinatorLayout, child: FloatingActionButton, dependency: View): Boolean {
        val searchView = dependency as SearchView
        if (searchView.isShowing) {
            child.hide()
        } else {
            child.show()
        }
        return super.onDependentViewChanged(parent, child, dependency)
    }
}
  1. 在布局XML中给FAB绑定该Behavior
<com.google.android.material.floatingactionbutton.FloatingActionButton
    android:id="@+id/floating_action_button"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_gravity="bottom|end"
    android:layout_margin="16dp"
    android:contentDescription="添加联系人"
    app:srcCompat="@drawable/round_person_add_alt_24"
    app:layout_behavior=".SearchViewFabBehavior"
    tools:ignore="ContentDescription,HardcodedText" />

注意事项

  • 使用fab.hide()/fab.show()会自带Material Design标准的淡入淡出动画,比直接设置visibility更符合设计规范。
  • 确保项目依赖最新版本的Material Design 3库,避免API兼容问题。

内容的提问来源于stack exchange,提问作者Jay Dolar

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.30 19:37:32