如何在Android SearchView的OnCloseListener中获取视图以缩小宽度?
解决SearchView关闭时缩小宽度的问题
嘿,其实你完全不用重新查找视图哦!你已经通过findViewById获取到了searchView这个实例,直接在OnCloseListener回调里复用它就行啦~
修改后的完整代码示例
// 先获取SearchView实例 SearchView searchView = findViewById(R.id.searchicon); // 保存初始宽度,方便关闭时恢复(可选,如果你想回到原来的尺寸) int originalSearchWidth = searchView.getLayoutParams().width; // 点击搜索图标时加宽SearchView searchView.setOnSearchClickListener(new View.OnClickListener() { @Override public void onClick(View v) { v.getLayoutParams().width = 1800; // 必须调用requestLayout,通知系统重新计算布局 v.requestLayout(); } }); // 关闭搜索时缩小宽度 searchView.setOnCloseListener(new SearchView.OnCloseListener() { @Override public boolean onClose() { // 直接用已有的searchView实例修改宽度,这里用保存的初始值,也可以设固定数值 searchView.getLayoutParams().width = originalSearchWidth; // 同样要调用requestLayout生效 searchView.requestLayout(); return false; } });
几个关键注意点:
- 直接复用已有实例:
searchView是你在外部已经获取到的视图引用,回调内部可以直接访问它(只要变量的作用域允许,比如是Activity的成员变量,或者方法内的final/有效final变量) - 必须调用
requestLayout():修改LayoutParams后,系统不会自动更新布局,手动调用这个方法才能让尺寸变化生效 - 灵活设置恢复尺寸:如果你不想回到初始宽度,也可以直接设成固定值(比如
500)或者用ViewGroup.LayoutParams.WRAP_CONTENT/MATCH_PARENT
内容的提问来源于stack exchange,提问作者Akash Gajbhiye
相关产品推荐
相关产品推荐

