如何在包含SearchView的Toolbar中修改标题?(附代码片段)
解决Toolbar含SearchView时修改标题的问题
嘿,我来帮你搞定这个问题~其实不管Toolbar里有没有SearchView,修改标题的核心方法很直接,但要注意你是怎么把SearchView和Toolbar结合的,下面分两种常见情况说明:
1. 你已经把Toolbar设置为ActionBar(最常见场景)
从你的代码片段里的setSu...来看,应该是调用了setSupportActionBar(toolbar)对吧?这种情况下,你有两种方式修改标题:
- 直接通过Toolbar对象设置:
private void setupSearchToolbar() { Toolbar toolbar = findViewById(R.id.toolbar); setSupportActionBar(toolbar); // 直接设置Toolbar标题 toolbar.setTitle("你的新标题"); // 或者通过ActionBar设置(效果完全一致) // getSupportActionBar().setTitle("你的新标题"); // 后续添加SearchView的逻辑... }
2. 你直接把SearchView作为子View添加到Toolbar中
如果你的代码里是通过toolbar.addView(mSearchView)把SearchView直接加进Toolbar的,那除了上面的标题设置方法,还要注意SearchView的宽度不要完全占满Toolbar——你代码里用了mSearchView.setMaxWidth(Integer.MAX_VALUE),这会让SearchView撑满整个Toolbar,标题自然被遮挡看不到。
这时候可以调整SearchView的布局参数,给标题留出空间:
private void setupSearchToolbar() { Toolbar toolbar = findViewById(R.id.toolbar); toolbar.setTitle("你的新标题"); // 给SearchView设置布局参数,限制宽度占比 Toolbar.LayoutParams params = new Toolbar.LayoutParams( ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT ); // 让SearchView占Toolbar宽度的80%,剩下空间留给标题 params.weight = 0.8f; mSearchView.setLayoutParams(params); toolbar.addView(mSearchView); }
额外提示:动态切换标题(搜索时隐藏/恢复)
如果想要在用户开始搜索时隐藏标题,结束搜索后恢复,可以结合OnQueryTextListener实现:
@Override public boolean onQueryTextChange(String newText) { Toolbar toolbar = findViewById(R.id.toolbar); if (!TextUtils.isEmpty(newText)) { // 搜索中,隐藏标题 toolbar.setTitle(""); } else { // 搜索结束,恢复原标题 toolbar.setTitle("首页"); } return true; }
这样就能完美控制Toolbar的标题啦~
内容的提问来源于stack exchange,提问作者MaaAn13
相关产品推荐
相关产品推荐

