web-dev-qa-db-ja.com

Android-検索バー全体をクリック可能にする

フラグメントで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" />

enter image description here

問題は、検索アイコンのみがクリックできることです。検索バーの他の領域はクリックできません。アイコンをクリックするだけで検索できます。

enter image description here

検索エリア全体をクリック可能にするのを手伝ってください。

enter image description here

28
Saran

クリック可能とはどういう意味ですか?検索アクションをトリガーするか、編集エリアにフォーカスを合わせますか?最初の場合は、アイコンを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);
}
6
Sethbrin

これは、SearchViewのOnClickでIconifiedをfalseに設定することで簡単に実行できます。

searchBar.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View v) {
        searchBar.setIconified(false);
    }
});

参照: Eric Luiの答え

うまくいけばそれが役立つでしょう。

53

トリックは、エリア全体をクリック可能にすることではなく、エリア全体をクリックしてキーボードを非表示にすることです。

最初に、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();
}

これが達成することは、キーボードを領域の全長に拡張し、それに焦点を合わせ、領域全体をクリックできるようにし、キーボードを削除して、ユーザーがクリックできるように見えるようにすることですフィールドにキーボードを表示します。

あなたが探しているものを達成する必要があります。

-シル

12
Silmarilos
search_bar.setOnClickListener(new OnClickListener() {
    @Override
    public void onClick(View v) {
        search_bar.onActionViewExpanded();
    }
});
12
Lokesh Gupta

これをxmlに追加しますAndroid:iconifiedByDefault="false"検索ビューを開いたままにします。

クリアするには、clearfocusをsearchviewオブジェクトに追加します。

5
pratz9999
searchView.setIconified(false);
3
Uthaya

これを使って

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();

            }
        }
    });
1
Ali Bagheri

以下のコード行を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" />
1
Pratik Adhikari

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" />
0
Vaibhav Rai