フラグメントでsearch-view要素を使用して、検索機能を実装しています。
<SearchView
Android:id="@+id/search_bar"
Android:layout_width="match_parent"
Android:layout_height="match_parent"
Android:layout_marginTop="7dp"
Android:layout_marginLeft="7dp"
Android:layout_marginRight="7dp"
Android:layout_marginBottom="7dp"
Android:background="@color/white" />
問題は、検索アイコンのみがクリックできることです。検索バーの他の領域はクリックできません。アイコンをクリックするだけで検索できます。
検索エリア全体をクリック可能にするのを手伝ってください。
クリック可能とはどういう意味ですか?検索アクションをトリガーするか、編集エリアにフォーカスを合わせますか?最初の場合は、アイコンをclickable = falseにするだけです。レイアウト全体をクリック可能にし、イベントリスナーを実装します。
<SearchView
Android:id="@+id/search_bar"
Android:layout_width="match_parent"
Android:layout_height="match_parent"
Android:clickable="true"
Android:click="onClick"
Android:layout_marginTop="7dp"
Android:layout_marginLeft="7dp"
Android:layout_marginRight="7dp"
Android:layout_marginBottom="7dp"
Android:background="@color/white" />
OnClickメソッドは
public void onClick(View v) {
InputMethodManager im = ((InputMethodManager) getSystemService(INPUT_METHOD_SERVICE));
im.showSoftInput(editText, 0);
}
これは、SearchViewのOnClickでIconifiedをfalseに設定することで簡単に実行できます。
searchBar.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
searchBar.setIconified(false);
}
});
参照: Eric Luiの答え
うまくいけばそれが役立つでしょう。
トリックは、エリア全体をクリック可能にすることではなく、エリア全体をクリックしてキーボードを非表示にすることです。
最初に、XMLのレイアウトは問題なく、そのままにしておきます。Javaでは、次のものが必要です。
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main_activity);
//Define your Searchview
SearchView searchView = (SearchView) findViewById(R.id.search_bar);
//Turn iconified to false:
searchView.setIconified(false);
//The above line will expand it to fit the area as well as throw up the keyboard
//To remove the keyboard, but make sure you keep the expanded version:
searchView.clearFocus();
}
これが達成することは、キーボードを領域の全長に拡張し、それに焦点を合わせ、領域全体をクリックできるようにし、キーボードを削除して、ユーザーがクリックできるように見えるようにすることですフィールドにキーボードを表示します。
あなたが探しているものを達成する必要があります。
-シル
search_bar.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
search_bar.onActionViewExpanded();
}
});
これをxmlに追加します
Android:iconifiedByDefault="false"
検索ビューを開いたままにします。クリアするには、
clearfocus
をsearchviewオブジェクトに追加します。
searchView.setIconified(false);
これを使って
searchView.setOnClickListener(new OnClickListener()
{
@Override
public void onClick(View v)
{
searchView.onActionViewExpanded();
OR
searchView.setIconified(false);
}
});
searchView.setOnQueryTextFocusChangeListener(new View.OnFocusChangeListener()
{
@Override
public void onFocusChange(View view, boolean b)
{
if(!b)
{
if(searchView.getQuery().toString().length() < 1)
{
searchView.setIconified(true); //close the search editor and make search icon again
OR
searchView.onActionViewCollapsed();
}
searchView.clearFocus();
}
}
});
以下のコード行をJavaファイルに記述します。
SearchView searchView = (SearchView) findViewById(R.id.searchView);
searchView.setQueryHint("Enter your address");
searchView.setIconified(false);
searchView.clearFocus();
その後、SearchView
タグ内のXMLファイルにAndroid:focusable="true"
を書くことを忘れないでください。
例えば:
<SearchView
Android:id="@+id/searchView"
Android:layout_width="match_parent"
Android:layout_height="wrap_content"
Android:focusable="true" />
Android-試用版の最新バージョン:
app:iconifiedByDefault="false"
例-
<Android.support.v7.widget.SearchView
Android:id="@+id/source_location_search"
Android:layout_width="match_parent"
Android:layout_height="wrap_content"
Android:layout_marginLeft="20dp"
Android:layout_marginTop="15dp"
Android:layout_marginRight="20dp"
app:iconifiedByDefault="false"
app:queryHint="Your hint text" />