Providing Search with SearchView (Android Development Patterns Ep 7)

많은 사람들이 여러분의 앱을 사용하고 찾으려면 두 가지 중 하나의 방법으로 분류해야 하는데요 사람들이 콘텐츠를 둘러보면서 찾던지 특정한 콘텐츠를 직접 검색해야 합니다 여러분의 앱이 좋은 인앱 검색을 제공하지 않는다면 사용자 기반의 일부에게만 서비스를 제공하고 있는 것입니다 안녕하세요 저는 이안 레이크입니다 오늘 저는 여러분에게 사용자들이 원하는 콘텐츠를 최대한 쉽고 정확하게 찾을 수 있도록 하는 서치뷰를 사용하여 훌륭한 인앱 검색을 만드는 법을 알려드릴 것입니다 좋은 검색을 제공하는 구성 요소는 가장 힘들 수도 있지만 좋은 콘텐츠에서 시작됩니다 하나의 검색 문자열을 사용하여 검색하는 것입니다 그러한 지도를 사용자의 목록이나 게시물의 전 텍스트 검색을 여러분의 데이터에 두고 데이터를 저장하는 방법은 모두 여러분에게 달려 있습니다 특별한 전 텍스트 검색(FTS)을 장치에 있는 테이블에 부분적으로 사용하는 게 도움이 될 수 있습니다 여러분의 데이터 세트가 충분히 작다면 검색 속도가 굉장히 중요합니다 지금은 검색 과정에만 집중하도록 하겠습니다 검색이 핵심적인 패턴이면 검색을 제공하기 위한 하나의 패턴을 표준화하는 게 좋겠죠 안드로이드에서는 서치뷰라고 적절한 이름을 가진 기능이 있습니다 일반적으로 서치뷰는 메인 앱, 바 또는 적절한 툴바에서 액션으로 여겨집니다 서치뷰 아이콘을 클릭하면 서치뷰는 인 라인으로 확장하여 사용자들이 즉시 검색할 수 있습니다 안드로이드 지원 라이브러리에 속한 AppCompat을 통하여 서치뷰를 모든 안드로이드 21과 더 높은 장치에서 사용할 수 있습니다 여러분의 앱 바로 안드로이드를 설치하는 것은 여러분이 추가하는 메뉴에 또 다른 항목을 추가하는 것입니다 눈에 띄는 제목과 아이콘 외에도 showAsAction에 collapseActionView가 있는 게 보이실 겁니다 이 항목은 메뉴가 기본값으로 정리되어야 하지만 정의된 showAsAction로 확장될 수 있다는 것을 나타냅니다 또한 showAsAction을 위해서 ifRoom이나 다른 대안이 필요합니다 그게 없다면 아이콘은 오버플로우 메뉴에서만 나타날 것입니다 그리고 이걸 완전한 서치뷰로 확장할 수도 없습니다 우리가 원하던 바가 아니죠 이걸 추가하여 우리는 서치뷰로 확장할 수 있는 멋진 검색 아이콘을 만들 수 있습니다 하지만 검색이 이동하거나 무언가를 하는 것은 아니에요 우리의 메뉴에 추가가 되었을 때 참조를 얻을 수 있지만 그 다음은 어떻게 해야 할까요? 먼저, setOnQueryTextListener를 사용하는 완전 수동 모드가 있어요 검색 텍스트가 변경되거나 사용자가 검색할 것을 입력하면 진행되는 것들과 시기를 정확하게 제어할 수 있도록 하는 콜백을 사용할 수 있습니다 검색이 가능한 구성을 제공하는 것보다 더 많은 기능을 이용할 수 있습니다 이것은 XML파일입니다 검색에 관련된 모든 다양한 옵션을 위한 것이죠 완전한 문서 페이지를 위한 많은 옵션들이 있습니다 상세한 설명이 있으며 전체적으로 9페이지나 되는 다양한 옵션이 있죠 다행히도, 이걸 정말로 짧고 쉽게 만들 수도 있습니다 일반적으로 여러분의 앱 이름이 되는 라벨과 검색 포스트의 형태의 힌트나 여러분의 앱 이름의 검색만 있어도 됩니다 여러분의 서치뷰에 음성검색을 추가하려면 어떻게 해야 할까요? 여러분의 검색 가능한 설정에 하나의 라인만 추가하면 됩니다 꽤 강력한 라인이지만 음성검색은 들리는 것을 바로 검색한다는 것을 기억하시길 바랍니다 검색할 때 변경할 수 없는 것입니다 그래서 음성검색을 활성화 하기 전에 검색할 것을 확인해야 합니다 그러면 검색 가능한 설정을 액티비티와 연결시킬 것입니다 사용자가 검색을 입력할 때 이러한 액티비티를 이용할 수 있겠죠 여기에서 우리는 singleTop 런치 모드를 사용했는데요 두 번째 검색과 같이 검색 가능한 액티비티에서 서치뷰를 사용하는 것이 중요하기 때문입니다 이러한 런치모드는 검색 결과 화면에서 잠재적으로 큰 백 스택을 막을 수 있으니까요 SearchManager를 사용하는 검색 가능한 설정에 서치뷰를 연결시키면 여러분의 액티비티에 추가된 메타데이터요소를 분석하는 시스템 서비스가 여러분의 서치뷰로 통과할 수 있는 검색 가능한 정보를 생성합니다 이로 인하여 우리의 검색 가능한 액티비티가 작동될 것입니다 실제 검색 텍스트를 가져올 때 우리는 액션을 검색하고 인텐트에서 추가적인 검색을 가져올 수 있습니다 이것은 onCreate로 불리며 singleTop 런치 모드를 사용하신다면 onNewIntent에서도 호출할 수 있습니다 이제 여러분에게는 훌륭한 서치뷰가 생겼습니다 우리가 선택한 액티비티를 곧바로 선택할 수 있습니다 최근의 검색 제안이나 사용자들이 원하는 것을 더욱 쉽게 찾을 수 있는 커스텀 제안에 대해서 말씀 드리지 않았는데요 개발자 사이트에서 더 많은 정보를 보시길 바랍니다 더 나은 앱을 만들기 위해 여러분이 생각해내는 훌륭한 서비스들이 정말로 기대됩니다