14

アイコン化されないように設定された ActionBar に SearchView があります。ユーザーが検索する何かを入力するまでビューにコンテンツがないため、SearchView に最初のフォーカスを与え、ユーザーがテキストを入力できるようにソフト キーボードが表示されていることを確認することは理にかなっています。最初に SearchView をタップする必要があります。

呼び出すだけで SearchView にフォーカスを与えることができます

searchView.requestFocus();

しかし、ソフトキーボードが表示されません。フラグメントの別の 1 つに、フォーカスしたい EditText があります。呼び出すことで、そこにソフト キーボードを表示できます。

InputMethodManager mgr = (InputMethodManager)getActivity().getSystemService(
            Context.INPUT_METHOD_SERVICE);
mgr.showSoftInput(editText, InputMethodManager.SHOW_IMPLICIT);

しかし、これは SearchView では機能しません。これを機能させることは確かに可能でなければなりません。

4

8 に答える 8

22

StackOverflow をさらに調べてみると、次の質問が見つかりました。

ソフト キーボードを強制的に開く

私のために働いた解決策が含まれています:

((InputMethodManager)getSystemService(Context.INPUT_METHOD_SERVICE)).
    toggleSoftInput(InputMethodManager.SHOW_FORCED,
                    InputMethodManager.HIDE_IMPLICIT_ONLY);
于 2013-03-05T13:43:20.853 に答える
6

setIconifiedByDefault(false) で SearchView を使用しています。Android 4.4.2 でのテストでは、キーボードを実際に表示する唯一の方法は、SearchView のソース コードを見て、キーボードの表示を要求する方法を模倣することでした。私は文字通り、見つけたり考えたりできる他のすべての方法を試しましたが、これがキーボードを確実に表示できる唯一の方法です。残念ながら、私の方法にはいくつかの反省が必要です。

onCreateOptionsMenu(メニュー):

searchView.requestFocus();
searchView.post(new Runnable() {
    @Override
    public void run() {
        showSoftInputUnchecked();
    }
});

次に、InputMethodManager で隠しメソッド「showSoftInputUnchecked」を呼び出すメソッドを作成します。

private void showSoftInputUnchecked() {
    InputMethodManager imm = (InputMethodManager)
            getSystemService(Context.INPUT_METHOD_SERVICE);

    if (imm != null) {
        Method showSoftInputUnchecked = null;
        try {
            showSoftInputUnchecked = imm.getClass()
                    .getMethod("showSoftInputUnchecked", int.class, ResultReceiver.class);
        } catch (NoSuchMethodException e) {
            // Log something
        }

        if (showSoftInputUnchecked != null) {
            try {
                showSoftInputUnchecked.invoke(imm, 0, null);
            } catch (IllegalAccessException e) {
                // Log something
            } catch (InvocationTargetException e) {
                // Log something
            }
        }
    }
}

パブリック API にないメソッドにアクセスするすべてのソリューションと同様に、これが Android の新しいバージョンで壊れないことを約束することはできません。

于 2014-01-26T17:21:48.320 に答える
-1

expandView メソッドを使用します: onCreateOptionsMenu は次のようになります。

         @Override                                                                                                     
       public boolean onCreateOptionsMenu(Menu menu) {                                                          
 //Used to put dark icons on light action bar                                                              

     final SearchView searchView = new SearchView(getSupportActionBar().getThemedContext());                   


       MenuItem mitem = menu.add("Search");                                                                  

       mitem.setIcon(ic_search_inverse)                                                                      
            .setActionView(searchView)                                                                       
            .setShowAsAction(MenuItem.SHOW_AS_ACTION_IF_ROOM | MenuItem.SHOW_AS_ACTION_COLLAPSE_ACTION_VIEW);

        mitem.expandActionView();                                                      

        listsearch.setOnItemClickListener(this);                                                             

 return     true;                                                                                              
      }  
于 2013-03-05T12:31:08.183 に答える
-2

私がやったことを試すことができます。これは私にとってはうまくいきました。

    //set query change listener
     searchView.setOnQueryTextListener(new SearchView.OnQueryTextListener(){
        @Override
        public boolean onQueryTextChange(String newText) {
            // TODO Auto-generated method stub
            return false;
        }

        @Override
        public boolean onQueryTextSubmit(String query) {
            /**
             * hides and then unhides search tab to make sure keyboard disappears when query is submitted
             * 4 = INVISIBLE
             * 0 = VISIBLE
             */
                  searchView.setVisibility(4);
                  searchView.setVisibility(0);
            return false;
        }

     });  
于 2013-08-20T16:16:12.557 に答える