2013-07-16 20 views
6

我在我的应用程序中有一个SearchView小部件,我想问一些关于自定义的问题。 首先,您只能通过点击搜索图标开始搜索,有什么方法可以让整个SearchView可点击吗? 另外,有没有办法让SearchView在点击时看起来像这样?自定义SearchView整个可点击在android

a busy cat http://i41.tinypic.com/rr2ow4.png [] [1]

现在就处于这种状态:!

a busy cat http://i41.tinypic.com/11jlu2p.png [] [1]

这里是我的代码:

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); 
    } 
+1

好,第一个问题是使用CitySearch的-S setOnClickListener解决。 –

+0

你应该回答这个问题与你的评论...它解决了我的问题 – coder

+0

@AnhaytAnanun你现在解决了这些问题?如果是这样的解决方案?你可以分享解决方案...这可能也会帮助我们 –

回答

19

默认情况下,SearchView是'图标化的',它显示为一个放大镜图标,并且只有当用户点击ic打开,然后编辑栏扩大。

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

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

另一个简单的方法可以通过设置onActionViewExpanded()来实现。

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

为了让写作在整个组件,当点击,我建议你在XML声明iconifiedByDefault="false"

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