2015-12-04 5 views
0

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

Я знаю, как это сделать, если бы деятельность

android:screenOrientation="landscape" 

но, конечно, мой основной класс расширяет InputMethodService, а не Activity поэтому я не могу использовать. Пользовательский интерфейс рисуется с использованием getLayoutInflater().inflate() в файле XML.

Благодаря

+0

Что вы имеете в виду ландшафтного режимом? Вы имеете в виду, что всегда выходите в режиме экстракции (клавиатура с большой прямоугольной панелью редактирования сверху, которая появляется во весь экран над приложением)? Или вы имеете в виду, что вся деятельность в ландшафтном режиме также (в этом случае ответ вы не можете, действие контролирует не обслуживание клавиатуры). –

+0

Зачем делать сервис? Служба - это, в основном, деятельность без контрактов пользовательского интерфейса (A Service - это компонент приложения, который может выполнять длительные операции в фоновом режиме и не предоставляет пользовательский интерфейс). Вы смотрите здесь: http://developer.android.com/guide/topics/text/creating-input-method.html – Frank

+0

Вы также можете взглянуть на другое сообщение, которое имеет много активности. Только полезно, если вы не получили далеко ... http://stackoverflow.com/questions/9577304/how-to-make-a-android-custom-keyboard – Frank

ответ

0

Как сказал Гейб, вы не можете контролировать ориентацию приложения.

Что вы можете сделать, если приложение находится в портретном режиме, не показывать клавиатуру, а выводить сообщение о том, что клавиатура работает только в ландшафтном режиме.

Это можно сделать, используя метод onConfigurationChanged().

@Override 
public void onConfigurationChanged(Configuration newConfig) { 
     InputMethodManager imm = (InputMethodManager) getSystemService(INPUT_METHOD_SERVICE); 
     IBinder token = getWindow().getWindow().getAttributes().token; 

     if (newConfig.orientation == Configuration.ORIENTATION_LANDSCAPE) { 
      imm.showSoftInputFromInputMethod(token, InputMethodManager.SHOW_FORCED); 
     } else if (newConfig.orientation == Configuration.ORIENTATION_PORTRAIT) { 
      imm.hideSoftInputFromInputMethod(token, InputMethodManager.RESULT_HIDDEN); 
      Toast.makeText(getApplicationContext(),"Keyboard works only in landscape mode!",Toast.LENGTH_LONG).show(); 
     } 
} 

Ans также в onStartInputView() методы ставит галочку:

@Override 
    public void onStartInputView(EditorInfo info, boolean restarting) { 
     super.onStartInputView(info, restarting); 
     if(getResources().getConfiguration().orientation == Configuration.ORIENTATION_PORTRAIT){ 
      //hide the keyboard & display a message (same as onConfigurationChanged()) 
     } else{ 
      //dont do anything...we are good to go! 
     } 
    } 
Смежные вопросы