一、应用名称
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
res/layout/input_setting.xml
1 <?xml version="1.0" encoding="utf-8"?> 2 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 3 android:layout_width="fill_parent" 4 android:layout_height="fill_parent" 5 android:orientation="horizontal" > 6 7 <TextView 8 android:id="@+id/textview" 9 android:layout_width="wrap_content" 10 android:layout_height="wrap_content" 11 android:text="输入法设置窗口" /> 12 13 </LinearLayout>
res/layout/arabic_keyboard.xml
1 <?xml version="1.0" encoding="utf-8"?> 2 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 3 android:layout_width="fill_parent" 4 android:layout_height="wrap_content" 5 android:background="#F2F2F2" 6 android:gravity="bottom" 7 android:orientation="vertical" > 8 9 <LinearLayout 10 android:layout_width="fill_parent" 11 android:layout_height="40.0dip" 12 android:orientation="horizontal" > 13 14 <Button 15 android:id="@+id/btn1" 16 android:layout_width="fill_parent" 17 android:layout_height="fill_parent" 18 android:layout_weight="1.0" 19 android:background="@drawable/blank" 20 android:text="ب" /> 21 22 <Button 23 android:id="@+id/btn2" 24 android:layout_width="fill_parent" 25 android:layout_height="fill_parent" 26 android:layout_weight="1.0" 27 android:background="@drawable/blank" 28 android:text="إ" /> 29 30 <Button 31 android:id="@+id/btn3" 32 android:layout_width="fill_parent" 33 android:layout_height="fill_parent" 34 android:layout_weight="1.0" 35 android:background="@drawable/blank" 36 android:text="آ" /> 37 38 <Button 39 android:id="@+id/btn4" 40 android:layout_width="fill_parent" 41 android:layout_height="fill_parent" 42 android:layout_weight="1.0" 43 android:background="@drawable/blank" 44 android:text="أ" /> 45 46 <Button 47 android:id="@+id/btn5" 48 android:layout_width="fill_parent" 49 android:layout_height="fill_parent" 50 android:layout_weight="1.0" 51 android:background="@drawable/blank" 52 android:text="ا" /> 53 54 <Button 55 android:id="@+id/btn6" 56 android:layout_width="fill_parent" 57 android:layout_height="fill_parent" 58 android:layout_weight="1.0" 59 android:background="@drawable/blank" 60 android:text="ء" /> 61 </LinearLayout> 62 63 <LinearLayout 64 android:layout_width="fill_parent" 65 android:layout_height="40.0dip" 66 android:orientation="horizontal" > 67 68 <Button 69 android:id="@+id/btn7" 70 android:layout_width="fill_parent" 71 android:layout_height="fill_parent" 72 android:layout_weight="1.0" 73 android:background="@drawable/blank" 74 android:text="خ" /> 75 76 <Button 77 android:id="@+id/btn8" 78 android:layout_width="fill_parent" 79 android:layout_height="fill_parent" 80 android:layout_weight="1.0" 81 android:background="@drawable/blank" 82 android:text="ح" /> 83 84 <Button 85 android:id="@+id/btn9" 86 android:layout_width="fill_parent" 87 android:layout_height="fill_parent" 88 android:layout_weight="1.0" 89 android:background="@drawable/blank" 90 android:text="ج" /> 91 92 <Button 93 android:id="@+id/btn10" 94 android:layout_width="fill_parent" 95 android:layout_height="fill_parent" 96 android:layout_weight="1.0" 97 android:background="@drawable/blank" 98 android:text="ث" /> 99 100 <Button 101 android:id="@+id/btn11" 102 android:layout_width="fill_parent" 103 android:layout_height="fill_parent" 104 android:layout_weight="1.0" 105 android:background="@drawable/blank" 106 android:text="ة" /> 107 108 <Button 109 android:id="@+id/btn12" 110 android:layout_width="fill_parent" 111 android:layout_height="fill_parent" 112 android:layout_weight="1.0" 113 android:background="@drawable/blank" 114 android:text="ت" /> 115 </LinearLayout> 116 117 <LinearLayout 118 android:layout_width="fill_parent" 119 android:layout_height="40.0dip" 120 android:orientation="horizontal" > 121 122 <Button 123 android:id="@+id/btn13" 124 android:layout_width="fill_parent" 125 android:layout_height="fill_parent" 126 android:layout_weight="1.0" 127 android:background="@drawable/blank" 128 android:text="ش" /> 129 130 <Button 131 android:id="@+id/btn14" 132 android:layout_width="fill_parent" 133 android:layout_height="fill_parent" 134 android:layout_weight="1.0" 135 android:background="@drawable/blank" 136 android:text="س" /> 137 138 <Button 139 android:id="@+id/btn15" 140 android:layout_width="fill_parent" 141 android:layout_height="fill_parent" 142 android:layout_weight="1.0" 143 android:background="@drawable/blank" 144 android:text="ز" /> 145 146 <Button 147 android:id="@+id/btn16" 148 android:layout_width="fill_parent" 149 android:layout_height="fill_parent" 150 android:layout_weight="1.0" 151 android:background="@drawable/blank" 152 android:text="ر" /> 153 154 <Button 155 android:id="@+id/btn17" 156 android:layout_width="fill_parent" 157 android:layout_height="fill_parent" 158 android:layout_weight="1.0" 159 android:background="@drawable/blank" 160 android:text="ذ" /> 161 162 <Button 163 android:id="@+id/btn18" 164 android:layout_width="fill_parent" 165 android:layout_height="fill_parent" 166 android:layout_weight="1.0" 167 android:background="@drawable/blank" 168 android:text="د" /> 169 </LinearLayout> 170 171 <LinearLayout 172 android:layout_width="fill_parent" 173 android:layout_height="40.0dip" 174 android:orientation="horizontal" > 175 176 <Button 177 android:id="@+id/btn19" 178 android:layout_width="fill_parent" 179 android:layout_height="fill_parent" 180 android:layout_weight="1.0" 181 android:background="@drawable/blank" 182 android:text="غ" /> 183 184 <Button 185 android:id="@+id/btn20" 186 android:layout_width="fill_parent" 187 android:layout_height="fill_parent" 188 android:layout_weight="1.0" 189 android:background="@drawable/blank" 190 android:text="ع" /> 191 192 <Button 193 android:id="@+id/btn21" 194 android:layout_width="fill_parent" 195 android:layout_height="fill_parent" 196 android:layout_weight="1.0" 197 android:background="@drawable/blank" 198 android:text="ظ" /> 199 200 <Button 201 android:id="@+id/btn22" 202 android:layout_width="fill_parent" 203 android:layout_height="fill_parent" 204 android:layout_weight="1.0" 205 android:background="@drawable/blank" 206 android:text="ط" /> 207 208 <Button 209 android:id="@+id/btn23" 210 android:layout_width="fill_parent" 211 android:layout_height="fill_parent" 212 android:layout_weight="1.0" 213 android:background="@drawable/blank" 214 android:text="ض" /> 215 216 <Button 217 android:id="@+id/btn24" 218 android:layout_width="fill_parent" 219 android:layout_height="fill_parent" 220 android:layout_weight="1.0" 221 android:background="@drawable/blank" 222 android:text="ص" /> 223 </LinearLayout> 224 225 <LinearLayout 226 android:layout_width="fill_parent" 227 android:layout_height="40.0dip" 228 android:orientation="horizontal" > 229 230 <Button 231 android:id="@+id/btn25" 232 android:layout_width="fill_parent" 233 android:layout_height="fill_parent" 234 android:layout_weight="1.0" 235 android:background="@drawable/blank" 236 android:text="ن" /> 237 238 <Button 239 android:id="@+id/btn26" 240 android:layout_width="fill_parent" 241 android:layout_height="fill_parent" 242 android:layout_weight="1.0" 243 android:background="@drawable/blank" 244 android:text="م" /> 245 246 <Button 247 android:id="@+id/btn27" 248 android:layout_width="fill_parent" 249 android:layout_height="fill_parent" 250 android:layout_weight="1.0" 251 android:background="@drawable/blank" 252 android:text="ل" /> 253 254 <Button 255 android:id="@+id/btn28" 256 android:layout_width="fill_parent" 257 android:layout_height="fill_parent" 258 android:layout_weight="1.0" 259 android:background="@drawable/blank" 260 android:text="ك" /> 261 262 <Button 263 android:id="@+id/btn29" 264 android:layout_width="fill_parent" 265 android:layout_height="fill_parent" 266 android:layout_weight="1.0" 267 android:background="@drawable/blank" 268 android:text="ق" /> 269 270 <Button 271 android:id="@+id/btn30" 272 android:layout_width="fill_parent" 273 android:layout_height="fill_parent" 274 android:layout_weight="1.0" 275 android:background="@drawable/blank" 276 android:text="ف" /> 277 </LinearLayout> 278 279 <LinearLayout 280 android:layout_width="fill_parent" 281 android:layout_height="40.0dip" 282 android:orientation="horizontal" > 283 284 <Button 285 android:id="@+id/btn31" 286 android:layout_width="fill_parent" 287 android:layout_height="fill_parent" 288 android:layout_weight="1.0" 289 android:background="@drawable/blank" 290 android:text="ئ" /> 291 292 <Button 293 android:id="@+id/btn32" 294 android:layout_width="fill_parent" 295 android:layout_height="fill_parent" 296 android:layout_weight="1.0" 297 android:background="@drawable/blank" 298 android:text="ى" /> 299 300 <Button 301 android:id="@+id/btn33" 302 android:layout_width="fill_parent" 303 android:layout_height="fill_parent" 304 android:layout_weight="1.0" 305 android:background="@drawable/blank" 306 android:text="ي" /> 307 308 <Button 309 android:id="@+id/btn34" 310 android:layout_width="fill_parent" 311 android:layout_height="fill_parent" 312 android:layout_weight="1.0" 313 android:background="@drawable/blank" 314 android:text="ؤ" /> 315 316 <Button 317 android:id="@+id/btn35" 318 android:layout_width="fill_parent" 319 android:layout_height="fill_parent" 320 android:layout_weight="1.0" 321 android:background="@drawable/blank" 322 android:text="و" /> 323 324 <Button 325 android:id="@+id/btn36" 326 android:layout_width="fill_parent" 327 android:layout_height="fill_parent" 328 android:layout_weight="1.0" 329 android:background="@drawable/blank" 330 android:text="ه" /> 331 </LinearLayout> 332 333 <LinearLayout 334 android:layout_width="fill_parent" 335 android:layout_height="40.0dip" 336 android:orientation="horizontal" > 337 338 <Button 339 android:id="@+id/btn37" 340 android:layout_width="0dp" 341 android:layout_height="fill_parent" 342 android:layout_weight="1.0" 343 android:background="@drawable/delete" /> 344 345 <Button 346 android:id="@+id/btn38" 347 android:layout_width="0dp" 348 android:layout_height="fill_parent" 349 android:layout_weight="1.0" 350 android:background="@drawable/enter" 351 android:text="\n" /> 352 353 <Button 354 android:id="@+id/btn39" 355 android:layout_width="0dp" 356 android:layout_height="fill_parent" 357 android:layout_weight="2.0" 358 android:background="@drawable/blank" 359 android:text=" " /> 360 361 <Button 362 android:id="@+id/btn40" 363 android:layout_width="0dp" 364 android:layout_height="fill_parent" 365 android:layout_weight="1.0" 366 android:background="@drawable/blank" 367 android:text="." /> 368 369 <Button 370 android:id="@+id/btn41" 371 android:layout_width="0dp" 372 android:layout_height="fill_parent" 373 android:layout_weight="1.0" 374 android:background="@drawable/blank" 375 android:text="،" /> 376 377 </LinearLayout> 378 379 </LinearLayout>
六、效果显示