SearchView를 자동으로 확장하고 포커스를 제공합니다.
사용자가에서 "검색"아이콘을 누르면 화면 상단에 ActionBar
a SearchView
가 표시 되는 응용 프로그램을 개발 중입니다.
내 문제는 SearchView
초점이 맞지 않거나 확장되지 않았으므로 사용자가 검색 버튼을 눌러 Searchview
확장하고 키보드를 꺼내야한다는 것입니다.
이 문제를 어떻게 해결해야합니까?
기본적으로 SearchView를 확장하려면 setIconifiedByDefault(false)
초기화 할 때 호출 하십시오 (예 : onCreateOptionsMenu(..)
또는 onPrepareOptionsMenu(..)
). 나는 대부분의 경우 이것이 자동으로 초점을 줄 것이지만 단순히 전화 requestFocus()
를 걸지 는 않는다는 것을 알았 습니다.
이를 강제하기 위해 expandActionView () 메서드를 호출 할 수도 있습니다.
@Override
public boolean onCreateOptionsMenu( Menu menu )
{
super.onCreateOptionsMenu( menu );
MenuItem searchMenuItem = menu.findItem( R.id.mi_search ); // get my MenuItem with placeholder submenu
searchMenuItem.expandActionView(); // Expand the search menu item in order to show by default the query
return true;
}
작업 표시 줄 레이아웃에서 항목 검색 :
<item
android:id="@+id/mi_search"
android:icon="@drawable/abs__ic_search_api_holo_light"
android:title="@string/search"
android:showAsAction="ifRoom|collapseActionView"
android:actionViewClass="com.actionbarsherlock.widget.SearchView"
/>
당신이 그것을 갖고 싶다면 iconifiedByDefault
이것은 나를 위해 일했습니다. setFocusable
그리고 setIconified
필요합니다.
SearchView searchView = (SearchView) menu.findItem(R.id.action_search).getActionView();
searchView.setIconifiedByDefault(true);
searchView.setFocusable(true);
searchView.setIconified(false);
searchView.requestFocusFromTouch();
업데이트 : 당신이 android.support.v7.widget.SearchView
행동을 사용 하는 경우 우리는 매우 다릅니다. clearFocus
항상 키보드 팝업을 원하지 않는 경우 필요합니다. 어떤 이유로 appcompat를 사용할 때 메뉴가 항상 다시 생성됩니다.
SearchView searchView = (SearchView) menu.findItem(R.id.action_search).getActionView();
searchView.setIconified(false);
searchView.clearFocus();
레이아웃에서 사용하는 경우
mSearchView.onActionViewExpanded()
이것은 나를 위해 일했습니다.
루트 레이아웃에서 :
xmlns:app="http://schemas.android.com/apk/res-auto"
SearchView는 다음과 같이 정의됩니다.
<android.support.v7.widget.SearchView
android:id="@+id/search_contacts"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_gravity="center_horizontal"
android:layout_margin="15dp"
android:background="@drawable/search_view"
app:iconifiedByDefault="false"
app:queryHint="Search name or email"
>
<requestFocus />
</android.support.v7.widget.SearchView>
차이점은 앱 태그에 있습니다.
app:iconifiedByDefault="false"
app:queryHint="Search name or email"
활동 내에서 사용하는 경우 사용해야합니다.
view.onActionViewExpanded();
내부 메뉴 옵션을 사용하는 경우 사용해야합니다.
MenuItem.expandActionView();
참고 : SearchView에서만 작동합니다.
이 두 가지 상황이 저에게 효과적입니다.
이것은 나를 위해 일했습니다.
menu.expandActionView();
SearchView#setIconified()
Java 코드의 SearchView 핸들에서 메소드를 사용할 수 있습니다 . 여기 더 :
http://developer.android.com/reference/android/widget/SearchView.html#setIconified(boolean)
You can also make use of SearchView#setIconifiedByDefault()
. More info here:
http://developer.android.com/reference/android/widget/SearchView.html#setIconifiedByDefault(boolean)
use this
SearchManager searchManager = (SearchManager) mActivity.getSystemService(Context.SEARCH_SERVICE);
SearchView searchView = new SearchView(mActivity.actionBar.getThemedContext());
searchView.setSearchableInfo(searchManager.getSearchableInfo(mActivity.getComponentName()));
searchView.setIconifiedByDefault(false);
searchView.setQueryHint("Search");
menu.findItem(R.id.action_search).setActionView(searchView);
@Pascalius's answer worked for me. But every time you close the SearchView, and click again, you lost the Focus. So I inserted the code in a setOnMenuItemClickListener
like this:
MenuItem item = menu.findItem(R.id.action_search);
SearchManager searchManager = (SearchManager) getSystemService(Context.SEARCH_SERVICE);
final SearchView searchView = (SearchView) item.getActionView();
item.setOnMenuItemClickListener(new MenuItem.OnMenuItemClickListener() {
@Override
public boolean onMenuItemClick(MenuItem menuItem) {
searchView.setIconifiedByDefault(true);
searchView.setFocusable(true);
searchView.setIconified(false);
searchView.requestFocusFromTouch();
return false;
}
});
MenuItemCompat's SearchView has a property named maxWidth.
final MenuItem searchItem = menu.findItem(R.id.action_search);
final SearchView searchView = (SearchView) MenuItemCompat.getActionView(searchItem);
searchView.setMaxWidth(xxx);
use screen width instead of xxx offcourse
android:iconifiedByDefault="true"
in your xml file
I am using android.widget Searchview and iconified by default.Below code in xml helped me make it expand and autofocus on search view,when clicked:
<SearchView
android:id="@+id/searchView"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:iconifiedByDefault="true"
android:focusable="true"
android:focusableInTouchMode="true"
android:queryHint="Search"/>
For Appcompat Searchview you can use this method:
MenuItemCompat.expandActionView(mSearchMenuItem);
참고URL : https://stackoverflow.com/questions/11710042/expand-and-give-focus-to-searchview-automatically
'programing tip' 카테고리의 다른 글
System.Security.SecurityException : 원본을 찾을 수 없지만 일부 또는 모든 이벤트 로그를 검색 할 수 없습니다. (0) | 2020.11.06 |
---|---|
산업 표준에서 #define이 금지되어 있습니까? (0) | 2020.11.06 |
Pandas의 열 이름을 기반으로 여러 열 삭제 (0) | 2020.11.06 |
필드가 업데이트 될 때 UITextField "값 변경됨"이 실행되지 않음 (0) | 2020.11.06 |
배포 인증서 / 개인 키가 설치되지 않았습니다. (0) | 2020.11.06 |