私は次のようなsearchViewを持っています:
private void setupSearchView() {
mSearchView = (SearchView) getActivity().findViewById(
R.id.search_view_neue);
setSearchViewBackground();
mSearchView.setOnClickListener(this);
mSearchView.setOnQueryTextListener(this);
}
public boolean onQueryTextSubmit(String query) {
searchcounter = searchcounter + 1;
setSearchViewBackground();
ArrayList<WissensdokumenteRecord> documents = settingListContent(new ArrayList<WissensdokumenteRecord>());
setListAdapter(new NeueWissensdokumentItemAdapter(
inflater.getContext(), R.layout.row_example, documents));
InputMethodManager im = (InputMethodManager) getActivity()
.getSystemService(Context.INPUT_METHOD_SERVICE);
im.hideSoftInputFromWindow(getActivity().getCurrentFocus()
.getWindowToken(), 0);
return false;
}
<SearchView
Android:id="@+id/search_view_neue"
Android:layout_width="match_parent"
Android:layout_height="60dp"
Android:layout_marginLeft="40dp"
Android:layout_marginRight="40dp"
Android:background="@drawable/border_searchview"
Android:maxWidth="540dp"
Android:queryHint="Neue Dokumente suchen" >
</SearchView>
したがって、検索ビューの動作は、検索ボタンをクリックするとキーボードが開くというものです。今、私は何かを検索することができます。検索ビューの任意の場所をクリックして検索を行うことはできますか?誰かが私のための例を持っていますか?
私はこれを次の方法で行うことができました:
クリックリスナーで検索ビューを設定する
mSearchView.setOnClickListener(this);
OnClickイベントをキャッチします。
@Override
public void onClick(View v) {
switch (v.getId()) {
case R.id.searchView:
mSearchView.onActionViewExpanded();
break;
}
}
このようにして、検索バーのどこかをクリックすると、キーボードと検索がアクティブになります。
これはあなたが達成しようとしていることを正確に行います。 setIconified(false)
は、SearchViewのこの端に十字アイコンを保持するため、ユーザーは虫眼鏡がクリックされた場合と同じ方法でキャンセルできます。
searchView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
searchView.setIconified(false);
}
});
setOnSearchClickListener
listnerを使用してSearchView
クリックを検出することを提案する必要がありますAndroid docs :
setOnSearchClickListener
void setOnSearchClickListener(View.OnClickListenerリスナー)
検索ボタンが押されたときに通知するリスナーを設定します。
@Override
public boolean onCreateOptionsMenu(Menu menu) {
MenuInflater menuInflater = getMenuInflater();
menuInflater.inflate(R.menu.orders_menu, menu);
MenuItem searchItem = menu.findItem(R.id.action_search);
SearchManager searchManager = (SearchManager) getSystemService(Context.SEARCH_SERVICE);
if (searchView != null) {
searchView = (SearchView) searchItem.getActionView();
searchView.setOnSearchClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
//perform your click operation here
}
});
return true;
}
OnClickListenerを設定する必要がある理由がわかりません。 SearchViewをクリックすると、テキストカーソルが更新されます。検索を実行するには、キーボードのIMEアクションがあります。それをクリックすると検索が実行される場合、カーソルなどを変更することはできません。テキストフィールドでフォーカス/更新カーソル以外のものを作成することは一般的に間違った動作です。
私が覚えている限り、OnQueryTextListenerでキーボードを非表示にする必要はありません。自動的にヒットするはずです。 OnQueryTextSubmitで検索を処理します
子へのすべてのタッチをインターセプトし、タッチダウン時にコールバックを実行する検索ウィジェット:
_class InterceptTouchSearchView(context: Context, attrs: AttributeSet) : SearchView(context, attrs) {
var onActionDownIntercepted: (() -> (Unit))? = null
override fun onInterceptTouchEvent(ev: MotionEvent?): Boolean {
return true
}
@SuppressLint("ClickableViewAccessibility")
override fun onTouchEvent(ev: MotionEvent?): Boolean {
if (ev?.action == MotionEvent.ACTION_DOWN) {
onActionDownIntercepted?.invoke()
}
return false
}
}
_
使用法:search_view.onActionDownIntercepted = { onSearchFieldClicked() }