web-dev-qa-db-ja.com

SearchViewからフォーカスを削除する方法は?

onResume()SearchViewからフォーカスとテキストを削除したい。

searchView.clearFocus()を試しましたが、機能していません。

これは私のxmlコードです:

<SearchView
    Android:id="@+id/searchView"
    Android:layout_width="match_parent"
    Android:layout_height="wrap_content"
    Android:layout_alignBottom="@+id/toolbar"
    Android:layout_alignTop="@+id/toolbar"
    Android:layout_centerVertical="true"
    Android:layout_marginBottom="4dp"
    Android:layout_marginTop="4dp"
    Android:iconifiedByDefault="false"
    Android:paddingLeft="16dp"
    Android:paddingRight="16dp" />
23

onResume()SearchViewからフォーカスとテキストを削除したい

これを実現するには、ルートレイアウトを_Android:focusableInTouchMode_属性でフォーカス可能に設定し、onResume()Viewにフォーカスを要求できます。

例えば:

_<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
    xmlns:Android="http://schemas.Android.com/apk/res/Android"
    Android:id="@+id/root_layout"
    Android:layout_width="match_parent"
    Android:layout_height="match_parent"
    Android:orientation="vertical"
    Android:focusableInTouchMode="true">

    <SearchView
        Android:id="@+id/search_view"
        Android:layout_width="match_parent"
        Android:layout_height="wrap_content"
        Android:iconifiedByDefault="false"/>

</LinearLayout>
_

そして、Activityで:

_private View rootView;
private SearchView searchView;

// ...

@Override
protected void onCreate(Bundle savedInstanceState) {

    // ...

    rootView = findViewById(R.id.root_layout);
    searchView = (SearchView) findViewById(R.id.search_view);
}

@Override
protected void onResume() {
    super.onResume();

    searchView.setQuery("", false);
    rootView.requestFocus();
}
_
44
earthw0rmjim

アクティビティ中は親レイアウトに移動し、fragmentでもframelayoutでも同じことを行います。この属性を追加するだけです:

Android:focusableInTouchMode="true"
16

OnResumeメソッドでこのコード行を使用します

if (searchView != null) {
    searchView.setQuery("", false);
    searchView.clearFocus();
    searchView.onActionViewCollapsed();
}
8
Masum

onResume()にこのコードを書く

  searchView.setText("");    
  this.getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_HIDDEN);     
2
Megha Sharma

searchView.clearFocus();onResume()だけが私のケースを助けました

1
Pointyhat

SearchViewウィジェットで、追加するだけです

  Android:focusable="false"

完全なウィジェットコード

    <Android.support.v7.widget.SearchView
        Android:id="@+id/your_search_view_id"
        Android:layout_width="match_parent"
        Android:layout_height="wrap_content"
        app:iconifiedByDefault="false"
        app:queryHint="Search something..." 
        Android:focusable="false" />
1
Cedriga

最も単純な(そして私が思うに、唯一の100%動作する)ソリューションは、目に見えないLinearLayoutを作成することです。このLinearLayoutは、EditTextからフォーカスを取得します。

0
Zeeshan Yousaf

Activityが開始されたときにフォーカスを取り除こうとしている人のために[〜#〜] and [〜#〜] the SearchViewMenu、私はこれらの3つのことをしました、それはほんのいくつかでうまくいくかもしれません:

1.- SearchViewの親クラスを作成します。それをRafaSearchViewと呼びましょう:

_class RafaSearchView @JvmOverloads constructor(context: Context, attrs: AttributeSet? = null, defStyleAttr: Int = 0)
    : SearchView(context, attrs, defStyleAttr) {

    init {
        setIconifiedByDefault(false)
    }
}
_

2.- Toolbarがあるxmlを取得し、_touchable="false"_および_focusableInTouchMode="true"_を設定します。

_    <androidx.appcompat.widget.Toolbar
        Android:id="@+id/searchToolbar"
        Android:layout_width="match_parent"
        Android:layout_height="?attr/actionBarSize"
        Android:background="@color/white"
        Android:focusable="false"
        Android:focusableInTouchMode="true"
        Android:theme="@style/ToolBarStyle"
        app:popupTheme="@style/AppTheme.PopupOverlay" />
_

3.- onCreateOptionsMenu(Menu)RafaSearchViewを宣言しているとき、以下を呼び出します:

_    searchView?.isIconified = false
    searchView?.clearFocus()
_
0

他のビューグループにフォーカスを要求しただけで、searchviewからフォーカスが削除されました。

0
Raghav Sharma

OnResume()関数でキーボードを手動で非表示にするには、次のようにします。

InputMethodManager imm = (InputMethodManager) context.getSystemService(context.INPUT_METHOD_SERVICE);
        View view = context.getCurrentFocus();

        if (view == null) {
            view = new View(context);
        }
        if (view != null) {

            IBinder iBinder = view.getWindowToken();

             imm.hideSoftInputFromWindow(iBinder, 0);
         }
0
taranjeetsapra