programing tip

SearchView를 자동으로 확장하고 포커스를 제공합니다.

itbloger 2020. 11. 6. 07:54
반응형

SearchView를 자동으로 확장하고 포커스를 제공합니다.


사용자가에서 "검색"아이콘을 누르면 화면 상단에 ActionBara 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

반응형