Android SearchView에서 키보드를 닫는 방법은 무엇입니까?
ActionBar에 searchView가 있습니다. 사용자가 입력을 마치면 키보드를 닫고 싶습니다. searchView에 다음 queryTextListener가 있습니다.
final SearchView.OnQueryTextListener queryTextListener = new SearchView.OnQueryTextListener() {
@Override
public boolean onQueryTextChange(String newText) {
// Do something
return true;
}
@Override
public boolean onQueryTextSubmit(String query) {
showProgress();
// Do stuff, make async call
getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_HIDDEN);
return true;
}
};
유사한 질문에 따라 다음 코드는 키보드를 닫아야하지만이 경우에는 작동하지 않습니다.
getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_HIDDEN);
나는 또한 시도했다 :
InputMethodManager imm = (InputMethodManager)getSystemService(Context.INPUT_METHOD_SERVICE);
imm.hideSoftInputFromWindow(searchView.getWindowToken(), 0);
둘 다 작동하지 않습니다. 이것이 Honeycomb 특정 문제인지 아니면 ActionBar의 searchView와 관련이 있는지 또는 둘 다인지 확실하지 않습니다. 누구든지이 일을 얻었거나 왜 작동하지 않는지 알고 있습니까?
비슷한 일을하려고했습니다. SearchActivity
다른 곳에서 를 시작하고 Activity
로드 될 때 열린 검색 필드에 검색어가 나타나도록해야했습니다. 위의 모든 접근 방식을 시도했지만 마지막으로 ( 위의 Ridcully의 답변 과 유사 ) 변수를 SearchView
in으로 설정 한 onCreateOptionsMenu()
다음 사용자가 새 검색을 제출할 때 onQueryTextSubmit()
호출 clearFocus()
됩니다 SearchView
.
private SearchView searchView;
@Override
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.search_menu, menu);
searchView = (SearchView) menu.findItem(R.id.menu_search)
.getActionView(); // set the reference to the searchView
searchView.setOnQueryTextListener(this);
searchMenuItem = (MenuItem) menu.findItem(R.id.menu_search);
searchMenuItem.expandActionView(); // expand the search action item automatically
searchView.setQuery("<put your search term here>", false); // fill in the search term by default
searchView.clearFocus(); // close the keyboard on load
return true;
}
@Override
public boolean onQueryTextSubmit(String query) {
performNewSearch(query);
searchView.clearFocus();
return true;
}
간단하고 명확하며 깔끔합니다.
@Override
public boolean onQueryTextSubmit(String query) {
// your search methods
searchView.clearFocus();
return true;
}
아래와 같이 onQueryTextSubmit에서 false를 반환하십시오.
@Override
public boolean onQueryTextSubmit(String s) {
return false;
}
전화하면 어떻게 든 작동합니다
InputMethodManager imm = (InputMethodManager)getSystemService(Context.INPUT_METHOD_SERVICE);
imm.hideSoftInputFromWindow(searchView.getWindowToken(), 0);
그리고
otherWidget.requestFocus();
나를 위해 다음과 같이 작동합니다.
내 활동에는 멤버 변수가 있습니다.
private SearchView mSearchView;
다음 onCreateOptionsMenu()
과 같이 해당 변수를 설정합니다.
public boolean onCreateOptionsMenu(Menu menu) {
MenuInflater inflater = getMenuInflater();
inflater.inflate(R.menu.library, menu);
mSearchView = (SearchView)menu.findItem(R.id.miSearch).getActionView();
mSearchView.setOnQueryTextListener(this);
return true;
}
에서 QueryTextListener
마지막에, 나는이 작업을 수행 :
mSearchView.setQuery("", false);
mSearchView.setIconified(true);
SearchView의 소스 코드를 살펴본 결과 쿼리 텍스트를 빈 문자열로 재설정하지 않으면 SearchView가 그렇게하고 키보드도 제거하지 않습니다. 실제로 소스 코드에서 충분히 깊게 드릴 다운하면 동일한 결과를 얻을 수 있다고 yuku가 제안했지만 여전히 저수준의 항목을 엉망으로 만들 필요가 없기 때문에 솔루션이 더 좋습니다.
나를 위해, 위의 어느 것도 첫 번째 제출에서 작동하지 않았습니다. 그것은 숨어 있었고 즉시 키보드를 다시 보여주었습니다. clearFocus()
다른 모든 작업이 완료된 후 발생하도록 뷰의 핸들러에 를 게시해야 했습니다.
mSearchView.setOnQueryTextListener(new SearchView.OnQueryTextListener() {
@Override
public boolean onQueryTextSubmit(String query) {
if (!"".equals(query)) {
mSearchView.post(new Runnable() {
@Override
public void run() {
mSearchView.clearFocus();
}
});
}
return true;
}
@Override
public boolean onQueryTextChange(String newText) {
return false;
}
});
편집 : 더 나은 솔루션을 맨 위에 추가했지만 이전 답변을 참조로 유지했습니다.
@Override
public boolean onQueryTextSubmit(String query) {
searchView.clearFocus();
return false;
}
원래 답변 : setOnQueryTextListener를 사용하여 프로그래밍했습니다. 검색보기가 숨겨지면 키보드가 사라지고 다시 표시 될 때 키보드가 다시 나타나지 않습니다.
//set query change listener
searchView.setOnQueryTextListener(new SearchView.OnQueryTextListener(){
@Override
public boolean onQueryTextChange(String newText) {
// TODO Auto-generated method stub
return false;
}
@Override
public boolean onQueryTextSubmit(String query) {
/**
* hides and then unhides search tab to make sure keyboard disappears when query is submitted
*/
searchView.setVisibility(View.INVISIBLE);
searchView.setVisibility(View.VISIBLE);
return false;
}
});
태블릿 앱에서 이중 창 활동으로 작업하고 있습니다.
f.getView().requestFocus(); // f is the target fragment for the search
검색 후 소프트 키보드를 해제하기에 충분했습니다. InputMethodManager를 사용할 필요가 없습니다.
ActionBarSherlock 4.3을 사용했고 ProgressDialog가 있습니다. postExecute 메서드에서 닫으면 Searchview가 포커스를 얻습니다. 이를 수정하려면 :
//Handle intent and hide soft keyboard
@Override
protected void onNewIntent(Intent intent) {
setIntent(intent);
handleIntent(intent);
searchView.setQuery("", false);
searchView.setIconified(true);
searchView.clearFocus();
}
/*When dismiss ProgressDialog, searchview gain focus again and shows the keyboard. I call clearFocus() to avoid it.*/
AsyncTask.onPostExecute(){
if(pd!=null)
pd.dismiss();
if(searchView!=null)
searchView.clearFocus();
}
도움이 되었기를 바랍니다.
사용할 수 있습니다.
if (isKeybordShowing(MainActivity.this, MainActivity.this.getCurrentFocus())) {
onBackPressed();
}
public boolean isKeybordShowing(Context context, View view) {
try {
InputMethodManager keyboard = (InputMethodManager) context.getSystemService(Context.INPUT_METHOD_SERVICE);
keyboard.hideSoftInputFromWindow(view.getWindowToken(), 0);
return keyboard.isActive();
} catch (Exception ex) {
Log.e("keyboardHide", "cannot hide keyboard", ex);
return false;
}
}
나를 위해 일한 두 가지 솔루션, 첫 번째는 SearchView 인스턴스를 사용하는 것입니다.
private void hideKeyboard(){
InputMethodManager imm = (InputMethodManager)getSystemService(Context.INPUT_METHOD_SERVICE);
imm.hideSoftInputFromWindow(searchView.getWindowToken(), 0);
}
두 번째 솔루션 :
private void hideKeyboard(){
InputMethodManager inputManager = (InputMethodManager)getSystemService(Context.INPUT_METHOD_SERVICE);
inputManager.hideSoftInputFromWindow(getCurrentFocus().getWindowToken(), InputMethodManager.HIDE_NOT_ALWAYS);
}
아래 코드는 Searchview에서 키보드를 숨기도록 작동합니다.
MenuItem searchItem = baseMenu.findItem(R.id.menuSearch);
edtSearch= (EditText) searchItem.getActionView().findViewById(R.id.search_src_text);
MenuItemCompat.setOnActionExpandListener(searchItem, new MenuItemCompat.OnActionExpandListener() {
@Override
public boolean onMenuItemActionExpand(MenuItem item) {
edtSearch.post(new Runnable() {
@Override
public void run() {
InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
imm.hideSoftInputFromWindow(searchEditText.getWindowToken(), 0);
}
});
return true;
}
@Override
public boolean onMenuItemActionCollapse(MenuItem item) {
return true;
}
});
왜 이것을 시도하지 않습니까? X 버튼을 터치하면 무슨 일이 있어도 검색보기에 초점이 맞춰집니다.
ImageView closeButton = (ImageView)searchView.findViewById(R.id.search_close_btn);
closeButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
EditText et = (EditText) findViewById(R.id.search_src_text);
et.setText("");`enter code here`
searchView.setQuery("", false);
searchView.onActionViewCollapsed();
menuSearch.collapseActionView();
}
});
ReferenceURL : https://stackoverflow.com/questions/7409288/how-to-dismiss-keyboard-in-android-searchview
'IT story' 카테고리의 다른 글
조각과 활동 간의 통신-모범 사례 (0) | 2021.01.06 |
---|---|
Javascript로 지리적 위치가 거부되었는지 확인하는 방법이 있습니까? (0) | 2021.01.05 |
배열을 다시 색인화하는 방법은 무엇입니까? (0) | 2021.01.05 |
build.xml : 479로 Android 빌드 실패 : SDK에 빌드 도구가 설치되어 있지 않습니다. (0) | 2021.01.05 |
ADB가 응답하지 않습니다. (0) | 2021.01.05 |