2015-07-13 6 views
0

Я строю специальную клавиатуру Android, и я не могу исправить эту ошибку - у меня есть клавиатура на арабском и QWERTY-клавиатуре, и когда я поворачиваю свое устройство на клавиатуре QWERTY (или даже арабский сдвиг), это как если бы моя программа была «перезапущена», и она становится арабской клавиатурой без сдвига.Мягкая клавиатура Android возвращается к стандартной клавиатуре при изменении ориентации

onSaveInstanceState(Bundle savedInstanceState) не работает, потому что моя заявка не распространяется Activity, но InputMethodService.

я поставил следующие в моем андроида манифеста

android:configChanges="keyboard|keyboardHidden|orientation" 
android:windowSoftInputMode="stateUnchanged|adjustResize"> 

Я попытался с помощью

@Override 
    public void onConfigurationChanged(Configuration newConfig) { 
     super.onConfigurationChanged(newConfig); 

     Log.i(MYDEBUG, "Config Changed " + currentKeyboard.equals(qwerty)); 

    } 

Однако currentKeyboard.equals(qwerty)) всегда приводит к ложным, и я убедился, что это правда как раз перед изменением ориентации.

Любая помощь будет высоко оценена.

ответ

-1

Хорошо, после того, как невероятно думая, что я понял, что проблема была с линией кода super.onConfigurationChanged(newConfig);

Когда удаляется, мой код будет менять ориентацию, но моя клавиатура не будет изменен. Поскольку мне нравится функция перераспределения родительского элемента, я создал массив, содержащий все клавиатуры, и после изменения ориентации я бы обновил массив так, чтобы массив клавиатуры имел нужные размеры.

@Override 
public void onConfigurationChanged(Configuration newConfig) { 

    int currentKeyboard = 0; 
    boolean isShifted = kv.isShifted(); 
    for (int i = 0; i < keyboard.length; i++) { 
     if(kv.getKeyboard().equals(keyboard[i])){ 
      currentKeyboard = i; 
      break; 
     } 
    } 

    super.onConfigurationChanged(newConfig); 

    initializeKeyboardArray(); 
    setKeyboard(keyboard[currentKeyboard]); 
    kv.setShifted(isShifted); 

} 

private void initializeKeyboardArray(){ 
    keyboard = new Keyboard[7]; 
    keyboard[ARABIC] = arabic; 
    keyboard[ARABIC_SHIFT] = arabicShift; 
    keyboard[ARABIC_SYMBOLS] = arabicSymbols; 
    keyboard[ARABIC_SYMBOLS_SHIFT] = arabicSymbolsShift; 
    keyboard[QWERTY] = qwerty; 
    keyboard[QWERTY_SYMBOLS] = qwertySymbols; 
    keyboard[QWERTY_SYMBOLS_SHIFT] = qwertySymbolsShift; 
} 

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

0

Я думаю, что это ошибка приложения. Если приложение перезапускается при изменении ориентации, ваше входное соединение срывается и перестраивается на новый текст редактирования. Это означает, что клавиатура увидит это как новое соединение и начнет работу в состоянии по умолчанию. Чтобы проверить это, напишите тестовое приложение, которое отключит перезапуск при изменении конфигурации и посмотрит, все ли происходит с клавиатурами в этом приложении.

+0

Извините, как остановить приложение после перезапуска? Я думал, что добавление строки кода в манифесте перестает это делать. – sometimes24

+0

Добавление этого файла в манифест приложения. Добавление его к клавиатуре не делает. Это просто прекратит перезапуск службы клавиатуры. –

+0

Извините, что вы меня потеряли. Я немного новичок в области разработки Android. Как вы думаете, вы можете уточнить, что вы сказали? спасибо – sometimes24

 Смежные вопросы

  • Нет связанных вопросов^_^