现在的位置: 首页 > 综合 > 正文

android输入法02:openwnn源码解析04—设置界面

2012年02月18日 ⁄ 综合 ⁄ 共 2912字 ⁄ 字号 评论关闭

这是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

        这里的代码比较简单

[java] view
plain
copy

  1. /** 
  2.  * The control panel preference class for Japanese IME. 
  3.  * 
  4.  * @author Copyright (C) 2009 OMRON SOFTWARE CO., LTD.  All Rights Reserved. 
  5.  */  
  6. public class OpenWnnControlPanelJAJP extends PreferenceActivity {  
  7.   
  8.     /** @see android.preference.PreferenceActivity#onCreate */  
  9.     @Override public void onCreate(Bundle savedInstanceState) {  
  10.         super.onCreate(savedInstanceState);  
  11.         if (OpenWnnJAJP.getInstance() == null) {  
  12.             new OpenWnnJAJP(this);  
  13.         }  
  14.   
  15.         addPreferencesFromResource(R.xml.openwnn_pref_ja);  
  16.     }  
  17. }  

        程序通过配置文件直接生成一个PreferenceActivity。

2.2 Preferencescreen中利用intent跳转activity

       这里需要注意一个问题,就是说在openwnn_pref_ja.xml中有一个比较特别的配置项。你点击“日语用户词典”和“英语用户词典”,它转到的是一个新的Activity。我们来看一下这些配置项:

[java] view
plain
copy

  1. <PreferenceScreen android:key="user_dictionary_edit_words"  
  2.               android:title="@string/preference_dictionary_menu_ja"  
  3.               android:summary="@string/preference_user_dictionary_edit_words_summary_ja"  
  4.               android:persistent="false">  
  5.     <intent android:action="android.intent.action.MAIN"  
  6.         android:targetPackage="jp.co.omronsoft.openwnn"  
  7.         android:targetClass="jp.co.omronsoft.openwnn.JAJP.UserDictionaryToolsListJAJP" />  
  8.     </PreferenceScreen>  

      这里涉及如何在PreferenceScreen中转到一个activity的操作,具体可以参看我的博文《android技巧01:Preferencescreen中利用intent跳转activity

2.3 皮肤

       在这个设置项里,“键盘自定义”这个选项是比较特殊的,通过它你可以设置输入法的皮肤。这里我回到DefaultSoftKeyboard.java类中initView函数是这样初始化皮肤的:

[java] view
plain
copy

  1. SharedPreferences pref = PreferenceManager.getDefaultSharedPreferences(parent);  
  2.         String skin = pref.getString("keyboard_skin",  
  3.                                      mWnn.getResources().getString(R.string.keyboard_skin_id_default));  
  4.         Log.d("OpenWnn""keyboard_skin="+skin);  
  5.         int id = parent.getResources().getIdentifier(skin, "layout""jp.co.omronsoft.openwnn");  
  6.   
  7.         mKeyboardView = (KeyboardView) mWnn.getLayoutInflater().inflate(id, null);  

        这实际上就是根据配置项,读取所设置的皮肤。

        另外,在openwnn_pref_ja.xml文件中,对皮肤选项的设置配置项是这样的:

抱歉!评论已关闭.