首页 > 解决方案 > 如何为 SearchView 投射 CustomEditText 而不是 EditText?

问题描述

我想像我们所做的那样将内部SearchView.SearchAutoComplete转换为CustomEditText这样的代码EditText

SearchView searchView =(SearchView) search_menu.findItem(R.id.action_filter_search).getActionView();
EditText edtSearch = ((EditText) searchView.findViewById(android.support.v7.appcompat.R.id.search_src_text));

我想自定义它的背景等等,所以问题是我如何才能转换为 a CustomEditText?提前致谢。

标签: androidandroid-custom-viewsearchview

解决方案


当您查看 的源代码时SearchView,您会承认默认输入视图正在膨胀到R.id.search_src_text

这是膨胀功能:

final int layoutResId = a.getResourceId(
            R.styleable.SearchView_layout, R.layout.search_view);

这是布局:R.layout.search_view

在此处输入图像描述

因此,要回答您的问题,无法自定义EditText并使用该功能找到它:findViewById(android.support.v7.appcompat.R.id.search_src_text)); 因为系统无法将 EditText 的实例映射到已经与另一个 view 粘在一起的 id

为了自定义SearchAutoCompleteSearchView我建议 4 种方法来实现它:

  1. 使用ReflectionTransform API来编辑 SeachView 的默认实现,这可能既耗时又难做。
  2. Android 提供Search Dialog来帮助您实现许多功能,例如语音搜索或建议
  3. 直接自定义SearchView,而不是CustomEditText
  4. 我认为SearchView$SearchAutoCompleteSearchView一个很好的实现。它提供了很多事件回调来覆盖用例。正如你提到的问题,改变背景或其他东西可能没什么大不了的。只需获取视图并对其进行编辑。

在此处输入图像描述


推荐阅读