2016-03-28 5 views
1

Я разрабатываю приложение, в котором мне нужно разрешить пользователю изменять клавиши ввода, указанные на клавиатуре по умолчанию, по запросу или по умолчанию, например, я могу предложить пользователю в начале выберите язык по умолчанию, а затем, когда используется клавиатура по умолчанию, приложение всегда отображает клавиши на клавиатуре выбранного языка,Изменение языка ввода клавиатуры Программно

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

Я не хочу запрашивать defau л клавиатуры, как следующее:

InputMethodManager imeManager = (InputMethodManager) getApplicationContext().getSystemService(INPUT_METHOD_SERVICE); 
imeManager.showInputMethodPicker(); 

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

Resources res = getBaseContext().getResources(); 
// Change locale settings in the app. 
DisplayMetrics dm = res.getDisplayMetrics(); 
android.content.res.Configuration conf = res.getConfiguration(); 
conf.locale = new Locale("ru".toLowerCase()); 
res.updateConfiguration(conf, dm); 
Log.i("inside onStart","after ever"); 
setContentView(R.layout.activity_main); 

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

ответ

-4

После выполнения некоторых исследований здесь и там нашел ответ, в первую очередь вы должны создать пользовательские клавиатуры View, которая проходит keyboardView и в нем создать статический ключ значение переменной как

static final int KEYCODE_LANGUAGE_SWITCH_ENG = -102; 
static final int KEYCODE_LANGUAGE_SWITCH_URDU = -103; 

после этого в вашем IME класс, в котором вы реализовали метод вводаMethodService, создайте клавиатуру внутри функции переопределения onInitializeInterface. как

mSymbolsKeyboard = new Keyboard(this, R.xml.qwerty2); 
mEngQwertyKeyboard = new Keyboard(this, R.xml.eng_qwerty); 

после этого добавить эти окончательные статические ключи в OnKey функции переопределения в случаях коммутации, а также в случаях установить клавиатуры соответственно:

setKeyboard(mEngQwertyKeyboard); 
+1

для разных языков, необходимых для создания разных xml раскладок клавиатуры? –

+0

только системные приложения могут устанавливать пользовательскую клавиатуру. –

+0

после разрешения givinig записи безопасных настроек, приложение получило сбой. Он сказал, что системные разрешения распространяются только на системные приложения. –

2

Вы можете изменить клавиатуру только и только без уведомления пользователя если ваше приложение работает как системное приложение по соображениям безопасности.

Вы должны дать разрешение Android первый в AndroidManifest.xml вашего приложения

"android.permission.WRITE_SECURE_SETTINGS" 

Затем вам необходимо определить идентификатор клавиатуры.

-> Чтобы узнать идентификатор, вы должны держать клавиатуры по умолчанию из меню настройки вручную затем поместить этот принт где-то,

System.out.println(Settings.Secure.getString(getContentResolver(),Settings.Secure.DEFAULT_INPUT_METHOD)); 

После того, как вы печатаете идентификатор и вы знаете свой ID клавиатуры вы можете сделать в соответствии с ниже (я изменил мою по умолчанию клавиатуру на японский)

InputMethodManager imeManager = (InputMethodManager) getApplicationContext().getSystemService(INPUT_METHOD_SERVICE); 

//imeManager.showInputMethodPicker(); //This is to see available keyboards. 
imeManager.setInputMethod(null,"jp.co.omronsoft.openwnn/.OpenWnnJAJP"); 

Наслаждайтесь !!

+0

после разрешения givinig записи безопасных настроек, приложение получило сбой. Он сказал, что системные разрешения распространяются только на системные приложения. –

+0

только системные приложения могут устанавливать пользовательскую клавиатуру. –