这是openwnn源码解析的第四篇,现在主要来介绍一下其设置界面。通过设置界面,大家可以深入了解输入法具有的功能。
最近看到网上有转载我的文章,但没有注明出处。由于这是系列文章单单转载一两篇读者也不一定看得懂。因此在这里做一个标记,如果看到转载的同学,可以访问我的博客http://blog.csdn.net/xianming01。
1、功能介绍
还是一样,由于我没有编译openwnn源码,因此这里的例子以android模拟器自带的openwnn日文输入法为例(android2.2)。
其设置界面如下:
其中“日语用户词典”和“英语用户词典”,你点进去会是一个词典编辑页面。
2、代码解析
这里涉及到的代码有几个:OpenWnnControlPanelJAJP.java,openwnn_pref_ja.xml;另外对与词典编辑,包含UserDictionaryToolsEdit.java,UserDictionaryToolsList.java,UserDictionaryToolsListFocus.java,UserDictionaryToolsListJAJP.java,UserDictionaryToolsEditJAJP.java,ClearLearnDictionaryDialogPreferenceJAJP.java,ClearUserDictionaryDialogPreferenceJAJP.java;以及KeyboardListPreferenceJAJP.java这个键盘配置项(这个配置项貌似就是传说中的皮肤功能)。
具体android的这种配置方式,是利用SharedPreferences和PreferenceActivity这两个类来实现的。其具体实现原理,可以参看本人的博客《android基础知识07:SharedPreferences和PreferenceActivity》。
2.1 OpenWnnControlPanelJAJP.java
这里的代码比较简单
- /**
- * The control panel preference class for Japanese IME.
- *
- * @author Copyright (C) 2009 OMRON SOFTWARE CO., LTD. All Rights Reserved.
- */
- public class OpenWnnControlPanelJAJP extends PreferenceActivity {
- /** @see android.preference.PreferenceActivity#onCreate */
- @Override public void onCreate(Bundle savedInstanceState) {
- super.onCreate(savedInstanceState);
- if (OpenWnnJAJP.getInstance() == null) {
- new OpenWnnJAJP(this);
- }
- addPreferencesFromResource(R.xml.openwnn_pref_ja);
- }
- }
2.2 Preferencescreen中利用intent跳转activity
这里需要注意一个问题,就是说在openwnn_pref_ja.xml中有一个比较特别的配置项。你点击“日语用户词典”和“英语用户词典”,它转到的是一个新的Activity。我们来看一下这些配置项:
- <PreferenceScreen android:key="user_dictionary_edit_words"
- android:title="@string/preference_dictionary_menu_ja"
- android:summary="@string/preference_user_dictionary_edit_words_summary_ja"
- android:persistent="false">
- <intent android:action="android.intent.action.MAIN"
- android:targetPackage="jp.co.omronsoft.openwnn"
- android:targetClass="jp.co.omronsoft.openwnn.JAJP.UserDictionaryToolsListJAJP" />
- </PreferenceScreen>
2.3 皮肤
在这个设置项里,“键盘自定义”这个选项是比较特殊的,通过它你可以设置输入法的皮肤。这里我回到DefaultSoftKeyboard.java类中initView函数是这样初始化皮肤的:
- SharedPreferences pref = PreferenceManager.getDefaultSharedPreferences(parent);
- String skin = pref.getString("keyboard_skin",
- mWnn.getResources().getString(R.string.keyboard_skin_id_default));
- Log.d("OpenWnn", "keyboard_skin="+skin);
- int id = parent.getResources().getIdentifier(skin, "layout", "jp.co.omronsoft.openwnn");
- mKeyboardView = (KeyboardView) mWnn.getLayoutInflater().inflate(id, null);
另外,在openwnn_pref_ja.xml文件中,对皮肤选项的设置配置项是这样的:
- <jp.co.omronsoft.openwnn.JAJP.KeyboardListPreferenceJAJP
- android:key="keyboard_skin"
- android:title="@string/preference_keyboard_skin_title"
- android:summary="@string/preference_keyboard_skin_summary"
- android:entries="@array/keyboard_skin"
- android:entryValues="@array/keyboard_skin_id"
- android:defaultValue="keyboard_android_default" />
- </PreferenceCategory>
- /**
- * The preference class of keyboard image list for Japanese IME.
- * This class notices to {@code OpenWnnJAJP} that the keyboard image is changed.
- *
- * @author Copyright (C) 2009, OMRON SOFTWARE CO., LTD.
- */
- public class KeyboardListPreferenceJAJP extends ListPreference {
- public KeyboardListPreferenceJAJP(Context context, AttributeSet attrs) {
- super(context, attrs);
- }
- public KeyboardListPreferenceJAJP(Context context) {
- this(context, null);
- }
- /** @see android.preference.DialogPreference#onDialogClosed */
- @Override protected void onDialogClosed(boolean positiveResult) {
- super.onDialogClosed(positiveResult);
- if (positiveResult) {
- OpenWnnJAJP wnn = OpenWnnJAJP.getInstance();
- int code = OpenWnnEvent.CHANGE_INPUT_VIEW;
- OpenWnnEvent ev = new OpenWnnEvent(code);
- try {
- wnn.onEvent(ev);
- } catch (Exception ex) {
- }
- }
- }
- }
3、其他
日文设置界面,除了以上介绍的配置项以外,比较麻烦的是关于词典的配置项。这一点,我们会在后面的文章介绍。
本文主要是介绍了日文输入法配置项中的难点。