2015-05-05 4 views
0

У меня странная ошибка.Android EditText imeOptions, создающий actionSearch, как actionDone?

У меня есть EditText, и я выполняю поиск с TextWatcher, когда я печатаю 3 буквы и выше, я выполняю поиск.

До недавнего времени я был нормальный EditText, и я хочу иметь значок поиска в моей клавиатуре, так что я добавил свой EditText в коде:

searchField.setImeOptions(EditorInfo.IME_ACTION_SEARCH); 

теперь имеет значок поиска, теперь к моей проблеме. При нажатии значка поиска все, что я хочу сделать, это закрыть клавиатуру. поиск не требуется.

вот мой код:

searchField.setOnEditorActionListener(new TextView.OnEditorActionListener() { 
       @Override 
       public boolean onEditorAction(TextView v, int actionId, KeyEvent event) { 
        if (event != null&& (event.getKeyCode() == KeyEvent.KEYCODE_SEARCH)) { 
         hideSoftKeyboard(); 
        } 
        return false; 
       } 
      }); 

hideSoftKeyboard является метод, который закрыть мою клавиатуру, и это код внутри:

public void hideSoftKeyboard() { 
    if (getActivity().getCurrentFocus() != null) { 
     InputMethodManager inputMethodManager = (InputMethodManager) getActivity().getSystemService(Activity.INPUT_METHOD_SERVICE); 
     inputMethodManager.hideSoftInputFromWindow(getActivity().getCurrentFocus().getWindowToken(), 0); 
    } 
} 

сейчас, моя клавиатура ДЕЛАЕТ близко, но по какой-то причине, За ней появляется «нормальная» клавиатура. клавиатура с иконкой поиска закрывается, но появляется клавиатура с значком ввода, и она ничего не набирает. Не связана ни с каким редактируемым текстом или чем-то, у меня есть только 1 текст редактирования на этом экране, и я не могу изобразить что случилось.

Если я вернусь к IME_ACTION_DONE, все снова отлично работает.

EDIT 1:

моя активность в манифесте:

<activity 
     android:name=".UI.activity.HomeActivity" 
     android:label="@string/app_name" 
     android:launchMode="singleTask" 
     android:screenOrientation="portrait" 
     android:theme="@android:style/Theme.Holo.Light.NoActionBar" 
     android:windowSoftInputMode="adjustResize" > 
     <intent-filter> 
      <action android:name="android.intent.action.MAIN" /> 

      <category android:name="android.intent.category.LAUNCHER" /> 
     </intent-filter> 
    </activity> 

и мой EditText в XML:

<EditText 
        android:layout_width="match_parent" 
        android:layout_height="match_parent" 
        android:id="@+id/search_document_main" 
        android:typeface="serif" 
        android:visibility="invisible" 
        android:singleLine="true" 
        android:background="@color/top_bar_bg_color" 
        android:hint="Search" /> 

любая идея, что я делаю не так?

также, есть ли способ показать, что значок поиска без использования imeOption Search?

+0

, когда вы возвращаете 'false', событие передается и не считается« потребляемым », поэтому ваш метод« hidKeyboard »снова открывает клавиатуру – thepoosh

+0

, она по-прежнему остается неизменной даже при передаче истинного значения. – JozeRi

+0

Сколько раз это событие называется? – thepoosh

ответ

0

попытаться получить токен окна из окна EditText. может быть, ваш текущий элемент фокуса не EditText

public void hideSoftKeyboard() { 
    InputMethodManager imm = (InputMethodManager) getSystemService(
      Context.INPUT_METHOD_SERVICE 
    ); 
    imm.hideSoftInputFromWindow(editText.getWindowToken(), 0); 
} 

Кроме того, вы можете упростить слушатель:

new TextView.OnEditorActionListener() { 
       @Override 
       public boolean onEditorAction (TextView v, int actionId, KeyEvent event) { 
        if (actionId == EditorInfo.IME_ACTION_SEARCH) { 
         hideKeyboard(); 
         return true; 
        } 
        return false; 
       } 
      } 

Если у вас есть проблемы, пожалуйста, добавить свой Activity layout, а также добавить Activity манифест декларации

+0

Привет, royB, спасибо за ответ, ваше решение не помогло =/Я отредактировал мой вопрос и добавил информацию, которую вы запросили, – JozeRi

+0

ok, можете ли вы переместить объявление 'imeSearch' в xml файл просто для удовольствия ...: 'android: imeOptions =" ​​actionSearch ". и удалите его из вашего кода программирования – royB

+0

ОК, просто попробовал это для удовольствия! :) все еще не работает T_T – JozeRi

0

Это работает для моего использования actionSearch:

txtAutocomplete.setOnEditorActionListener(new TextView.OnEditorActionListener() { 
      @Override 
      public boolean onEditorAction(TextView textView, int actionId, KeyEvent keyEvent) { 
       boolean handled = false; 
       if(actionId == EditorInfo.IME_ACTION_SEARCH || actionId == EditorInfo.IME_ACTION_UNSPECIFIED) 
       { 
        txtAutocomplete.clearFocus(); 

        InputMethodManager imm = (InputMethodManager)getActivity().getSystemService(Context.INPUT_METHOD_SERVICE); 
        imm.hideSoftInputFromWindow(txtAutocomplete.getWindowToken(),0); 

        handled = true; 
       } 
       return handled; 
      } 
     });