如何处理 Android 键盘 (IME) 中的配置更改?
How to handle configuration change in Android keyboard (IME)?
我一直在按照 Android sample 提供的文档来设计新的(相对简单的)键盘。在这一点上,我被配置更改(如主题、textSize 或有点复杂的东西)困住了,这需要 IME 重新创建自己。
public class ImePreferences extends PreferenceActivity implements SharedPreferences.OnSharedPreferenceChangeListener {
@Override
protected void onCreate(Bundle savedInstanceState) {
setTheme(R.style.AppTheme_WithActionBar);
super.onCreate(savedInstanceState);
PreferenceManager.getDefaultSharedPreferences(this).registerOnSharedPreferenceChangeListener(this);
}
@Override
public void onSharedPreferenceChanged(SharedPreferences sharedPreferences, String key) {
// reload ime
Log.d("anbani", "Stopping service " + String.valueOf(stopService(new Intent(this, SoftKeyboard.class))));
Log.d("anbani", "prefs changed");
}
...
}
这没有帮助。 StopService 值返回 true 但没有任何效果。
是否有一些技巧可以在不事先引用的情况下获取包键盘的实例?或者我在这里遗漏了一些简单的东西?
任何提示将不胜感激!
解决方案:
@Override public View onCreateInputView() {
// load preferences
return mInputView;
}
@Override public void onStartInputView(EditorInfo attribute, boolean restarting) {
super.onStartInputView(attribute, restarting);
setInputView(onCreateInputView());
...
}
我一直在按照 Android sample 提供的文档来设计新的(相对简单的)键盘。在这一点上,我被配置更改(如主题、textSize 或有点复杂的东西)困住了,这需要 IME 重新创建自己。
public class ImePreferences extends PreferenceActivity implements SharedPreferences.OnSharedPreferenceChangeListener {
@Override
protected void onCreate(Bundle savedInstanceState) {
setTheme(R.style.AppTheme_WithActionBar);
super.onCreate(savedInstanceState);
PreferenceManager.getDefaultSharedPreferences(this).registerOnSharedPreferenceChangeListener(this);
}
@Override
public void onSharedPreferenceChanged(SharedPreferences sharedPreferences, String key) {
// reload ime
Log.d("anbani", "Stopping service " + String.valueOf(stopService(new Intent(this, SoftKeyboard.class))));
Log.d("anbani", "prefs changed");
}
...
}
这没有帮助。 StopService 值返回 true 但没有任何效果。
是否有一些技巧可以在不事先引用的情况下获取包键盘的实例?或者我在这里遗漏了一些简单的东西?
任何提示将不胜感激!
解决方案:
@Override public View onCreateInputView() {
// load preferences
return mInputView;
}
@Override public void onStartInputView(EditorInfo attribute, boolean restarting) {
super.onStartInputView(attribute, restarting);
setInputView(onCreateInputView());
...
}