티스토리 뷰

[안드로이드] 검색 기능 구현하기(SearchableActivity)


안드로이드의 내장되어있는 검색 기능을 사용하는 방법을 알아보자.


안드로이드에서 제공하는 검색 기능을 이용하는 방법은 크게 2가지가 있는데


1) 기본적으로 내장되어있는 Search dialog를 이용하는 방법

2) SearchView를 이용하는 방법.


2번이 좀더 디자인에 융화되고 다양한 구현을 가능하게 하지만 Android SDK 3.0 (11 version)의 이후 버전에서만 사용이 가능하다. 따라서 좀더 넓은 호환성을 가지려면 1번을 이용하면 되고, 좀더 다양한 인터페이스를 구현하고자 한다면 2번대로 하면 될 것이다.

그 외 직접 EditText를 만들어서 키 입력마다 필터링을 하는 방법도 있는데 일단은 검색기능만 알아보자.

이번에는 1번 기본적으로 내장되어있는 Search dialog를 이용하는 방법을 이용할 것이다. 모든 Activity안에는 기본적으로 이 Search dialog가 내장되어있기 때문에 따로 새로운 인터페이스를 만들 필요가 없는 것이 좋고, 안드로이드 폰에 기본적으로 있는 돋보기 모양의 '검색' 버튼을 이용할때 활용하기에 편하다.

그럼 시작!


1. 기본 세팅 searchable.xml 만들기

: 일단 res/xml/searchable.xml 파일을 만든다.

: 아래와 같이 설정하자.

Resource Type = Searchable

Root Element = searchable


: 그리고 아래와 같이 내용을 추가해주자. (참고 : 'android:label' 항목만 필수이다.)


<?xml version="1.0" encoding="utf-8"?>

<searchable xmlns:android="http://schemas.android.com/apk/res/android" 

    android:label="@string/app_name"

    android:hint="@string/search"

    >

</searchable>


2. AndroidManifest.xml 안에 SearchableActivity를 설정하기 

: 검색을 하고자하는 Activity 안에 다음과 같이 설정해주자.

        <activity android:label="@string/event_list" android:name="EventListActivity">

            

            <intent-filter>

                <action android:name="android.intent.action.SEARCH"></action>

            </intent-filter>

            <meta-data android:name="android.app.searchable"

                android:resource="@xml/searchable"

                />

        </activity>

: 해당하는 intent가 ACTION_SEARCH를 받을 수 있게 설정해주고, 이 Activity를 위의 searchable.xml의 설정을 적용시킨다.


3. Activity 안에서 쿼리 받기

: Search dialog를 이용할때에는 검색을 할때 해당하는 Activity의 onCreate를 호출하면서 intent 안에 action과 query를 새로 설정하게 된다. 따라서 아래와 같이 설정하면 된다.

:아래의 소스 중에서 doSearchQuery에서 List를 리턴해서 adapter에 넣든 adapter에 직접 쿼리를 하든 설정하면 된다.

@Override

protected void onCreate(Bundle savedInstanceState) {

  super.onCreate(savedInstanceState);


  Intent intent = this.getIntent();


  if(Intent.ACTION_SEARCH.equals(intent.getAction()))

  {

    String query = intent.getStringExtra(SearchManager.QUERY);

    doSearchQuery(query); //여기서 쿼리를 실행한다. 

  }

}


4. Search dialog 불러오기

: Search dialog가 나올때에는 onPause()가 호출되지 않기 때문에 이 함수 안에서 따로 pause를 시켜줘야한다.

@Override

public boolean onSearchRequested() {

  pauseSomeStuff();

  return super.onSearchRequested();

}


코딩 끝.


- 이렇게 코딩을 하고 해당하는 Activity가서, 안드로이드의 검색 버튼을 누르면, 아래와 같이 검색 창이 나오면서 검색이 가능하다. 

* 위의 3번의 doSearchQuery를 짜면 검색 기능 구현 완료!


* 주의 : 검색을 한번 할때마다 매번 새로운 Activity가 열리니 navigation 디자인을 잘 생각해서 계획을 짜야할 것이다.


- Activity가 singleTop일때 또 다른 설정을 해주어야하는데 다른 자세한 사항들은 아래의 사이트를 참고하자.


참고 : http://developer.android.com/guide/topics/search/search-dialog.html


끝.


공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
«   2024/12   »
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30 31
글 보관함