【问题标题】:Custom SearchView whole clickable in android在android中自定义SearchView整个可点击
【发布时间】:2013-07-14 06:55:01
【问题描述】:

我的应用中有一个SearchView 小部件,我想问一些关于如何定制它的问题。首先,您只能通过单击搜索图标开始搜索,有没有办法让整个SearchView 可点击? 另外,有没有办法让SearchView在点击时出现类似这样的东西?

现在处于这种状态:

这是我的代码:

citySearch = (SearchView) findViewById(R.id.city_search_bar);
citySearch.setBackgroundResource(R.drawable.search_background);
citySearch.setOnSearchClickListener(new OnClickListener() {

    @Override
    public void onClick(View arg0) {
        citySearch.setIconifiedByDefault(true);
        //citySearch.setIconified(true);
    }

});
citySearch.setOnQueryTextListener(new OnQueryTextListener() {

    @Override
    public boolean onQueryTextChange(String text) {

        ((Filterable) cityListView.getAdapter()).getFilter().filter(text);

        return false;
    }

    @Override
    public boolean onQueryTextSubmit(String text) {

        return false;
    }

});

try
{
    Field searchField = SearchView.class.getDeclaredField("mSearchButton");
    searchField.setAccessible(true);
    ImageView searchBtn = (ImageView)searchField.get(citySearch);
    searchBtn.setImageResource(R.drawable.search_icon);
    searchBtn.setScaleType(ScaleType.FIT_CENTER);
    searchPlate.setBackgroundResource(R.drawable.search_background);
}
catch (NoSuchFieldException e)
{
    Log.e("SEARCHSTYLEERROR",e.getMessage(),e);
}
catch (IllegalAccessException e)
{
    Log.e("SEARCHSTYLEERROR",e.getMessage(),e);
}

【问题讨论】:

  • 好的,第一个问题用citySearch-s setOnClickListener解决了。
  • 你应该用你的评论回答这个问题......它解决了我的问题
  • @AnhaytAnanun 你现在解决这些问题了吗?如果是这样,解决方案是什么?你能分享一下解决方案吗......它也可能对我们有帮助
  • @AnhaytAnanun 勾选答案。没错。

标签: android android-styles searchview android-search


【解决方案1】:

默认情况下,SearchView 是“图标化”,显示为放大镜图标,并且只有当用户单击该图标时,编辑字段才会展开。

使用户能够单击 SearchView 上的任意位置并展开输入字段。我们只需要添加一个点击监听并在用户点击时调用 setIconified(false) 即可。

searchView = (SearchView)findViewById(R.id.searchView);
searchView.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            searchView.setIconified(false);
        }
    });

【讨论】:

    【解决方案2】:

    另一种简单的方法是设置onActionViewExpanded()

    searchView = (SearchView)findViewById(R.id.searchView);
    searchView.setOnClickListener(new OnClickListener() {
        @Override
        public void onClick(View v) {
            searchView.onActionViewExpanded();
        }
    });
    

    【讨论】:

      【解决方案3】:

      为了在单击整个组件时允许写入,我建议您在 xml 上声明 iconifiedByDefault="false"

      <SearchView
              android:layout_width="match_parent"
              android:layout_height="wrap_content"
              android:iconifiedByDefault="false"/>
      

      【讨论】:

      • 这是我一直在寻找的答案。我只需要在布局中添加 android:focusableInTouchMode="true" 即可摆脱最初对 Searchview 的关注。
      【解决方案4】:

      默认情况下,SearchView 是“图标化”的。 所以你应该在java中使用这段代码:

      SearchView searchView = (SearchView) findViewById(R.id.searchView);
      searchView.setOnClickListener(new View.OnClickListener() {
          @Override
          public void onClick(View v) {
              searchView.setIconified(false);
          }
      });
      

      或者在 xml 中使用这个:

      <SearchView
              android:id="@+id/searchView"
              android:iconifiedByDefault="false" />
      

      这两种方式是对的,只是图标显示方式不同。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2017-07-19
        • 1970-01-01
        • 1970-01-01
        • 2015-06-08
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多