[Android] 검색 화면을 SearchView로 설치
1. 시작
Qittaro라는 앱을 만들 때는 검색 화면을 설치해야 한다.
일반적인 검색 단어를 입력하고 결과를 표시하는 프로세스 응용 프로그램입니다.
애초 Fragment에 가입
EditText
하고 setOnEditorActionListener()
에서 Enter를 누르면...이런 절차 처리.이런 느낌이야.
EditText editText = (EditText)this.findViewById(R.id.edit_text);
editText.setOnEditorActionListener(new TextView.OnEditorActionListener() {
@Override
public boolean onEditorAction(TextView v, int actionId, KeyEvent event) {
if (event != null && event.getKeyCode() == KeyEvent.KEYCODE_ENTER) {
// ここに処理
}
}
});
이런 놈.하지만 검색 단어 입력이 검색 결과 일람과 함께 이상해 보인다면 트위터 앱에서 액션 바가 있는 곳에 검색 단어를 입력할 수 있다는 걸 발견하고 검색해 봤다.
그리고 순조롭게 이루어졌습니다. 이 설치를 소개하고 싶습니다.
2. SearchView 설치
안드로이드를 찾았습니다.widget.SearchView라고 합니다.
SearchView | Android Developers
특별히 어려운 일이 없으니 실장부터 입력단어까지 발췌문을 소개한다.
2.1. SupportLibrary
갑작스럽지만
android.widget.SearchView
은API Level 11
이상이다.Qittaro는 안드로이드 버젼 2.3 이상을 대상으로 하기 때문에 이렇게 사용하면 안 되지만
SupportLibrary
가 있어서 그걸 썼어요.그러나 설치에 큰 변화가 없기 때문에 어느 것이든 간단하게 가져올 수 있다.
2.2. 소스 코드
따라서 원본 코드를 보십시오.
SearchFragment.java
import android.os.Bundle;
import android.support.annotation.Nullable;
import android.support.v4.app.Fragment;
import android.support.v4.view.MenuItemCompat;
import android.support.v7.app.ActionBar;
import android.support.v7.app.ActionBarActivity;
import android.support.v7.widget.SearchView;
import android.view.LayoutInflater;
import android.view.MenuInflater;
import android.view.Menu;
import android.view.ViewGroup;
public class SearchFragment extends Fragment {
private static final String TAG = SearchFragment.class.getSimpleName();
private final SearchFragment self = this;
private SearchView searchView;
private String searchWord;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
// FragmentでMenuを表示する為に必要
this.setHasOptionsMenu(true);
}
@Override
public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
return inflater.inflate(R.layout.fragment_search, container, false);
}
@Override
public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
super.onCreateOptionsMenu(menu, inflater);
// Menuの設定
inflater.inflate(R.menu.search, menu);
// app:actionViewClass="android.support.v7.widget.SearchView"のItemの取得
MenuItem menuItem = menu.findItem(R.id.search_menu_search_view);
/**
* API level 11以上の場合はこっちを使う
*
* this.searchView = (SearchView)menuItem.getActionView();
*/
// ActionViewの取得
this.searchView = (SearchView) MenuItemCompat.getActionView(menuItem);
// 虫眼鏡アイコンを最初表示するかの設定
this.searchView.setIconifiedByDefault(true);
// Submitボタンを表示するかどうか
this.searchView.setSubmitButtonEnabled(false);
if (!this.searchWord.equals("")) {
// TextView.setTextみたいなもの
this.searchView.setQuery(this.searchWord, false);
} else {
String queryHint = self.getResources().getString(R.string.search_menu_query_hint_text);
// placeholderみたいなもの
this.searchView.setQueryHint(queryHint);
}
this.searchView.setOnQueryTextListener(self.onQueryTextListener);
}
private SearchView.OnQueryTextListener onQueryTextListener = new SearchView.OnQueryTextListener() {
@Override
public boolean onQueryTextSubmit(String searchWord) {
// SubmitボタンorEnterKeyを押されたら呼び出されるメソッド
return self.setSearchWord(searchWord);
}
@Override
public boolean onQueryTextChange(String newText) {
// 入力される度に呼び出される
return false;
}
};
private boolean setSearchWord(String searchWord) {
ActionBar actionBar = ((ActionBarActivity)this.getActivity()).getSupportActionBar();
actionBar.setTitle(searchWord);
actionBar.setDisplayShowTitleEnabled(true);
if (searchWord != null && !searchWord.equals("")) {
// searchWordがあることを確認
this.searchWord = searchWord;
}
// 虫眼鏡アイコンを隠す
this.searchView.setIconified(false);
// SearchViewを隠す
this.searchView.onActionViewCollapsed();
// Focusを外す
this.searchView.clearFocus();
return false;
}
}
search.xml<!-- res/menu/search.xml -->
<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
>
<item
android:id="@+id/search_menu_search_view"
android:orderInCategory="100"
android:title="@string/search_menu_search_text"
app:actionViewClass="android.support.v7.widget.SearchView"
app:showAsAction="always"
/>
</menu>
2.3. 캡처
이렇게 된 느낌.
핸드폰 상황
태블릿의 경우
2.4. 주의점
특별히 맞춤형으로 제작되지 않았기 때문에 가장 작게 설치했습니다.
이번에는
Fragment
에서 검색어를 얻고 싶어서 Fragment
에서 실시Menu
했습니다.Activity
별다른 일을 하지 않았다.단어에 유사 검색 옵션을 붙이면 힘들어요.
이럴 때는 솔직하게
EditText
+Button
이런 설치를 하는 게 좋을 것 같아요.3. 끝
이거 볼 때 정말 즐거웠어요.
나는 SDK가 나를 위해 이런 물건을 준비했다고 생각한다...
쓸 수 있는 건 이런 정신으로 하는 게 좋을 것 같아서요.
이 설치된 검색 화면을 사용하세요.
Reference
이 문제에 관하여([Android] 검색 화면을 SearchView로 설치), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/ryokosuge/items/186c525e0744903ee8ce텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)