2013-07-16 18 views
6

私は自分のアプリにSearchViewウィジェットを持っています。私はそれをカスタム化する方法についていくつか質問したいと思います。 まず、検索アイコンをクリックするだけで検索を開始できます。SearchView全体をクリック可能にする方法はありますか? また、クリックしたときにSearchViewをこのように表示させる方法はありますか?カスタム検索アンドロイドで全クリック可能

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

もう1つの簡単な方法は、onActionViewExpanded()です。コンポーネント全体でクリックしたとき、私はXMLにiconifiedByDefault="false"を宣言することをお勧めしたい書き込みできるようにするには

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

<SearchView 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:iconifiedByDefault="false"/> 
関連する問題