如何处理 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());

    ...
}