Android简易项目--傻瓜式阿拉伯语输入法(Dummy Arabic Input)
一、应用名称
Android简易项目--傻瓜式阿拉伯语输入法(Dummy Arabic Input)
二、应用图标
三、应用说明
现在通行的阿拉伯语键盘布局并无规律可循,阿拉伯语使用者需要花费较多时间才能掌握指法。这款傻瓜式阿拉伯语输入法依照阿语字母排序,可满足基本的阿语输入需求;使用者无需学习,可立即上手。
四、项目结构
五、主要代码
src/com.example.dummy_arabic_input/DummyArabicInputService.java
1 package com.example.dummy_arabic_input; 2 3 import android.inputmethodservice.InputMethodService; 4 import android.util.Log; 5 import android.view.View; 6 import android.view.View.OnClickListener; 7 import android.view.inputmethod.EditorInfo; 8 import android.view.inputmethod.InputConnection; 9 import android.widget.Button; 10 11 public class DummyArabicInputService extends InputMethodService implements 12 OnClickListener 13 { 14 15 @Override 16 public void onCreate()//不用写(Bundle savedInstanceState) 17 //因为这里没有Activity界面 18 { 19 super.onCreate(); 20 Log.d("dummy_arabic_input_onCreate", "invoked"); 21 } 22 23 @Override 24 public View onCreateInputView() 25 { 26 View view = getLayoutInflater().inflate(R.layout.arabic_keyboard, null); 27 //LayoutInflater is a class used to instantiate layout XML 28 //file into its corresponding View objects. 29 //inflate(int resource, ViewGroup root) 30 view.findViewById(R.id.btn1).setOnClickListener(this); 31 view.findViewById(R.id.btn2).setOnClickListener(this); 32 view.findViewById(R.id.btn3).setOnClickListener(this); 33 view.findViewById(R.id.btn4).setOnClickListener(this); 34 view.findViewById(R.id.btn5).setOnClickListener(this); 35 view.findViewById(R.id.btn6).setOnClickListener(this); 36 view.findViewById(R.id.btn7).setOnClickListener(this); 37 view.findViewById(R.id.btn8).setOnClickListener(this); 38 view.findViewById(R.id.btn9).setOnClickListener(this); 39 view.findViewById(R.id.btn10).setOnClickListener(this); 40 view.findViewById(R.id.btn11).setOnClickListener(this); 41 view.findViewById(R.id.btn12).setOnClickListener(this); 42 view.findViewById(R.id.btn13).setOnClickListener(this); 43 view.findViewById(R.id.btn14).setOnClickListener(this); 44 view.findViewById(R.id.btn15).setOnClickListener(this); 45 view.findViewById(R.id.btn16).setOnClickListener(this); 46 view.findViewById(R.id.btn17).setOnClickListener(this); 47 view.findViewById(R.id.btn18).setOnClickListener(this); 48 view.findViewById(R.id.btn19).setOnClickListener(this); 49 view.findViewById(R.id.btn20).setOnClickListener(this); 50 view.findViewById(R.id.btn21).setOnClickListener(this); 51 view.findViewById(R.id.btn22).setOnClickListener(this); 52 view.findViewById(R.id.btn23).setOnClickListener(this); 53 view.findViewById(R.id.btn24).setOnClickListener(this); 54 view.findViewById(R.id.btn25).setOnClickListener(this); 55 view.findViewById(R.id.btn26).setOnClickListener(this); 56 view.findViewById(R.id.btn27).setOnClickListener(this); 57 view.findViewById(R.id.btn28).setOnClickListener(this); 58 view.findViewById(R.id.btn29).setOnClickListener(this); 59 view.findViewById(R.id.btn30).setOnClickListener(this); 60 view.findViewById(R.id.btn31).setOnClickListener(this); 61 view.findViewById(R.id.btn32).setOnClickListener(this); 62 view.findViewById(R.id.btn33).setOnClickListener(this); 63 view.findViewById(R.id.btn34).setOnClickListener(this); 64 view.findViewById(R.id.btn35).setOnClickListener(this); 65 view.findViewById(R.id.btn36).setOnClickListener(this); 66 view.findViewById(R.id.btn37).setOnClickListener(this); 67 view.findViewById(R.id.btn38).setOnClickListener(this); 68 view.findViewById(R.id.btn39).setOnClickListener(this); 69 view.findViewById(R.id.btn40).setOnClickListener(this); 70 view.findViewById(R.id.btn41).setOnClickListener(this); 71 Log.d("dummy_arabic_input_onCreateInputView", "invoked"); 72 return view; 73 } 74 75 @Override 76 public View onCreateCandidatesView() 77 //Create and return the view hierarchy used to show candidates. 78 /* view hierarchy是用来说明在window中的view之间的关系的。 79 可以把view hierarchy认为是一棵翻转的tree structure, 80 而window就是这棵树的最上面的节点(根节点)。 81 树的下面就是父子view之间的关系。 82 从视觉上来看,view hierarchy就是一个封闭的结构, 83 就是一个view包含一个或多个view,而window包含所有的view。*/ 84 { 85 //下面的View.Gone是View类的静态成员, 86 //GONE: This view is invisible, 87 //and it doesn't take any space for layout purposes. 88 //我们的智能输入法界面最上面一般会有一栏候选项(CandidatesView), 89 //但我们这里创造的输入法不是智能输入法,不需要显示候选项, 90 //所以这里将CandidatesView设为GONE,即不可见 91 View view = getLayoutInflater().inflate(R.layout.arabic_keyboard, null); 92 view.findViewById(R.id.btn1).setVisibility(View.GONE); 93 view.findViewById(R.id.btn2).setVisibility(View.GONE); 94 view.findViewById(R.id.btn3).setVisibility(View.GONE); 95 view.findViewById(R.id.btn4).setVisibility(View.GONE); 96 view.findViewById(R.id.btn5).setVisibility(View.GONE); 97 view.findViewById(R.id.btn6).setVisibility(View.GONE); 98 view.findViewById(R.id.btn7).setVisibility(View.GONE); 99 view.findViewById(R.id.btn8).setVisibility(View.GONE); 100 view.findViewById(R.id.btn9).setVisibility(View.GONE); 101 view.findViewById(R.id.btn10).setVisibility(View.GONE); 102 view.findViewById(R.id.btn11).setVisibility(View.GONE); 103 view.findViewById(R.id.btn12).setVisibility(View.GONE); 104 view.findViewById(R.id.btn13).setVisibility(View.GONE); 105 view.findViewById(R.id.btn14).setVisibility(View.GONE); 106 view.findViewById(R.id.btn15).setVisibility(View.GONE); 107 view.findViewById(R.id.btn16).setVisibility(View.GONE); 108 view.findViewById(R.id.btn17).setVisibility(View.GONE); 109 view.findViewById(R.id.btn18).setVisibility(View.GONE); 110 view.findViewById(R.id.btn19).setVisibility(View.GONE); 111 view.findViewById(R.id.btn20).setVisibility(View.GONE); 112 view.findViewById(R.id.btn21).setVisibility(View.GONE); 113 view.findViewById(R.id.btn22).setVisibility(View.GONE); 114 view.findViewById(R.id.btn23).setVisibility(View.GONE); 115 view.findViewById(R.id.btn24).setVisibility(View.GONE); 116 view.findViewById(R.id.btn25).setVisibility(View.GONE); 117 view.findViewById(R.id.btn26).setVisibility(View.GONE); 118 view.findViewById(R.id.btn27).setVisibility(View.GONE); 119 view.findViewById(R.id.btn28).setVisibility(View.GONE); 120 view.findViewById(R.id.btn29).setVisibility(View.GONE); 121 view.findViewById(R.id.btn30).setVisibility(View.GONE); 122 view.findViewById(R.id.btn31).setVisibility(View.GONE); 123 view.findViewById(R.id.btn32).setVisibility(View.GONE); 124 view.findViewById(R.id.btn33).setVisibility(View.GONE); 125 view.findViewById(R.id.btn34).setVisibility(View.GONE); 126 view.findViewById(R.id.btn35).setVisibility(View.GONE); 127 view.findViewById(R.id.btn36).setVisibility(View.GONE); 128 view.findViewById(R.id.btn37).setVisibility(View.GONE); 129 view.findViewById(R.id.btn38).setVisibility(View.GONE); 130 view.findViewById(R.id.btn39).setVisibility(View.GONE); 131 view.findViewById(R.id.btn40).setVisibility(View.GONE); 132 view.findViewById(R.id.btn41).setVisibility(View.GONE); 133 134 Log.d("dummy_arabic_input_onCreateCandidatesView", "invoked"); 135 return view; 136 } 137 138 @Override 139 public void onStartInputView(EditorInfo info, boolean restarting) 140 { 141 Log.d("dummy_arabic_input_onStartInputView", "invoked"); 142 super.onStartInputView(info, restarting); 143 } 144 145 @Override 146 public void onFinishInput() 147 { 148 Log.d("dummy_arabic_input_onFinishInput", "invoked"); 149 super.onFinishInput(); 150 } 151 152 @Override 153 public void onDestroy() 154 { 155 Log.d("dummy_arabic_input_onDestroy", "invoked"); 156 super.onDestroy(); 157 } 158 159 @Override 160 public void onClick(View view) 161 { 162 if (view.getId() == R.id.btn37) 163 { 164 getCurrentInputConnection().deleteSurroundingText(1, 0); 165 //InputConnection接口是用来给Activity传数据的渠道(channel) 166 } 167 else 168 { 169 Button button = (Button) view; 170 InputConnection inputConnection = getCurrentInputConnection(); 171 172 if (button.getId() != R.id.btn37) 173 { 174 inputConnection.commitText(button.getText(), 1); 175 } 176 } 177 } 178 }
src/com.example.dummy_arabic_input/InputSetting.java
1 InputSetting.java