Android简易项目--傻瓜式阿拉伯语输入法(Dummy Arabic Input)
一、应用名称
Android简易项目--傻瓜式阿拉伯语输入法(Dummy Arabic Input)
二、应用图标
三、应用说明
现在通行的阿拉伯语键盘布局并无规律可循,阿拉伯语使用者需要花费较多时间才能掌握指法。这款傻瓜式阿拉伯语输入法依照阿语字母排序,可满足基本的阿语输入需求;使用者无需学习,可立即上手。
四、项目结构
五、主要代码
src/com.example.dummy_arabic_input/DummyArabicInputService.java
package com.example.dummy_arabic_input; import android.inputmethodservice.InputMethodService;
import android.util.Log;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.inputmethod.EditorInfo;
import android.view.inputmethod.InputConnection;
import android.widget.Button; public class DummyArabicInputService extends InputMethodService implements
OnClickListener
{ @Override
public void onCreate()//不用写(Bundle savedInstanceState)
//因为这里没有Activity界面
{
super.onCreate();
Log.d("dummy_arabic_input_onCreate", "invoked");
} @Override
public View onCreateInputView()
{
View view = getLayoutInflater().inflate(R.layout.arabic_keyboard, null);
//LayoutInflater is a class used to instantiate layout XML
//file into its corresponding View objects.
//inflate(int resource, ViewGroup root)
view.findViewById(R.id.btn1).setOnClickListener(this);
view.findViewById(R.id.btn2).setOnClickListener(this);
view.findViewById(R.id.btn3).setOnClickListener(this);
view.findViewById(R.id.btn4).setOnClickListener(this);
view.findViewById(R.id.btn5).setOnClickListener(this);
view.findViewById(R.id.btn6).setOnClickListener(this);
view.findViewById(R.id.btn7).setOnClickListener(this);
view.findViewById(R.id.btn8).setOnClickListener(this);
view.findViewById(R.id.btn9).setOnClickListener(this);
view.findViewById(R.id.btn10).setOnClickListener(this);
view.findViewById(R.id.btn11).setOnClickListener(this);
view.findViewById(R.id.btn12).setOnClickListener(this);
view.findViewById(R.id.btn13).setOnClickListener(this);
view.findViewById(R.id.btn14).setOnClickListener(this);
view.findViewById(R.id.btn15).setOnClickListener(this);
view.findViewById(R.id.btn16).setOnClickListener(this);
view.findViewById(R.id.btn17).setOnClickListener(this);
view.findViewById(R.id.btn18).setOnClickListener(this);
view.findViewById(R.id.btn19).setOnClickListener(this);
view.findViewById(R.id.btn20).setOnClickListener(this);
view.findViewById(R.id.btn21).setOnClickListener(this);
view.findViewById(R.id.btn22).setOnClickListener(this);
view.findViewById(R.id.btn23).setOnClickListener(this);
view.findViewById(R.id.btn24).setOnClickListener(this);
view.findViewById(R.id.btn25).setOnClickListener(this);
view.findViewById(R.id.btn26).setOnClickListener(this);
view.findViewById(R.id.btn27).setOnClickListener(this);
view.findViewById(R.id.btn28).setOnClickListener(this);
view.findViewById(R.id.btn29).setOnClickListener(this);
view.findViewById(R.id.btn30).setOnClickListener(this);
view.findViewById(R.id.btn31).setOnClickListener(this);
view.findViewById(R.id.btn32).setOnClickListener(this);
view.findViewById(R.id.btn33).setOnClickListener(this);
view.findViewById(R.id.btn34).setOnClickListener(this);
view.findViewById(R.id.btn35).setOnClickListener(this);
view.findViewById(R.id.btn36).setOnClickListener(this);
view.findViewById(R.id.btn37).setOnClickListener(this);
view.findViewById(R.id.btn38).setOnClickListener(this);
view.findViewById(R.id.btn39).setOnClickListener(this);
view.findViewById(R.id.btn40).setOnClickListener(this);
view.findViewById(R.id.btn41).setOnClickListener(this);
Log.d("dummy_arabic_input_onCreateInputView", "invoked");
return view;
} @Override
public View onCreateCandidatesView()
//Create and return the view hierarchy used to show candidates.
/* view hierarchy是用来说明在window中的view之间的关系的。
可以把view hierarchy认为是一棵翻转的tree structure,
而window就是这棵树的最上面的节点(根节点)。
树的下面就是父子view之间的关系。
从视觉上来看,view hierarchy就是一个封闭的结构,
就是一个view包含一个或多个view,而window包含所有的view。*/
{
//下面的View.Gone是View类的静态成员,
//GONE: This view is invisible,
//and it doesn't take any space for layout purposes.
//我们的智能输入法界面最上面一般会有一栏候选项(CandidatesView),
//但我们这里创造的输入法不是智能输入法,不需要显示候选项,
//所以这里将CandidatesView设为GONE,即不可见
View view = getLayoutInflater().inflate(R.layout.arabic_keyboard, null);
view.findViewById(R.id.btn1).setVisibility(View.GONE);
view.findViewById(R.id.btn2).setVisibility(View.GONE);
view.findViewById(R.id.btn3).setVisibility(View.GONE);
view.findViewById(R.id.btn4).setVisibility(View.GONE);
view.findViewById(R.id.btn5).setVisibility(View.GONE);
view.findViewById(R.id.btn6).setVisibility(View.GONE);
view.findViewById(R.id.btn7).setVisibility(View.GONE);
view.findViewById(R.id.btn8).setVisibility(View.GONE);
view.findViewById(R.id.btn9).setVisibility(View.GONE);
view.findViewById(R.id.btn10).setVisibility(View.GONE);
view.findViewById(R.id.btn11).setVisibility(View.GONE);
view.findViewById(R.id.btn12).setVisibility(View.GONE);
view.findViewById(R.id.btn13).setVisibility(View.GONE);
view.findViewById(R.id.btn14).setVisibility(View.GONE);
view.findViewById(R.id.btn15).setVisibility(View.GONE);
view.findViewById(R.id.btn16).setVisibility(View.GONE);
view.findViewById(R.id.btn17).setVisibility(View.GONE);
view.findViewById(R.id.btn18).setVisibility(View.GONE);
view.findViewById(R.id.btn19).setVisibility(View.GONE);
view.findViewById(R.id.btn20).setVisibility(View.GONE);
view.findViewById(R.id.btn21).setVisibility(View.GONE);
view.findViewById(R.id.btn22).setVisibility(View.GONE);
view.findViewById(R.id.btn23).setVisibility(View.GONE);
view.findViewById(R.id.btn24).setVisibility(View.GONE);
view.findViewById(R.id.btn25).setVisibility(View.GONE);
view.findViewById(R.id.btn26).setVisibility(View.GONE);
view.findViewById(R.id.btn27).setVisibility(View.GONE);
view.findViewById(R.id.btn28).setVisibility(View.GONE);
view.findViewById(R.id.btn29).setVisibility(View.GONE);
view.findViewById(R.id.btn30).setVisibility(View.GONE);
view.findViewById(R.id.btn31).setVisibility(View.GONE);
view.findViewById(R.id.btn32).setVisibility(View.GONE);
view.findViewById(R.id.btn33).setVisibility(View.GONE);
view.findViewById(R.id.btn34).setVisibility(View.GONE);
view.findViewById(R.id.btn35).setVisibility(View.GONE);
view.findViewById(R.id.btn36).setVisibility(View.GONE);
view.findViewById(R.id.btn37).setVisibility(View.GONE);
view.findViewById(R.id.btn38).setVisibility(View.GONE);
view.findViewById(R.id.btn39).setVisibility(View.GONE);
view.findViewById(R.id.btn40).setVisibility(View.GONE);
view.findViewById(R.id.btn41).setVisibility(View.GONE); Log.d("dummy_arabic_input_onCreateCandidatesView", "invoked");
return view;
} @Override
public void onStartInputView(EditorInfo info, boolean restarting)
{
Log.d("dummy_arabic_input_onStartInputView", "invoked");
super.onStartInputView(info, restarting);
} @Override
public void onFinishInput()
{
Log.d("dummy_arabic_input_onFinishInput", "invoked");
super.onFinishInput();
} @Override
public void onDestroy()
{
Log.d("dummy_arabic_input_onDestroy", "invoked");
super.onDestroy();
} @Override
public void onClick(View view)
{
if (view.getId() == R.id.btn37)
{
getCurrentInputConnection().deleteSurroundingText(1, 0);
//InputConnection接口是用来给Activity传数据的渠道(channel)
}
else
{
Button button = (Button) view;
InputConnection inputConnection = getCurrentInputConnection(); if (button.getId() != R.id.btn37)
{
inputConnection.commitText(button.getText(), 1);
}
}
}
}
src/com.example.dummy_arabic_input/InputSetting.java
InputSetting.java
res/layout/input_setting.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="horizontal" > <TextView
android:id="@+id/textview"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="输入法设置窗口" /> </LinearLayout>
res/layout/arabic_keyboard.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:background="#F2F2F2"
android:gravity="bottom"
android:orientation="vertical" > <LinearLayout
android:layout_width="fill_parent"
android:layout_height="40.0dip"
android:orientation="horizontal" > <Button
android:id="@+id/btn1"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:layout_weight="1.0"
android:background="@drawable/blank"
android:text="ب" /> <Button
android:id="@+id/btn2"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:layout_weight="1.0"
android:background="@drawable/blank"
android:text="إ" /> <Button
android:id="@+id/btn3"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:layout_weight="1.0"
android:background="@drawable/blank"
android:text="آ" /> <Button
android:id="@+id/btn4"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:layout_weight="1.0"
android:background="@drawable/blank"
android:text="أ" /> <Button
android:id="@+id/btn5"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:layout_weight="1.0"
android:background="@drawable/blank"
android:text="ا" /> <Button
android:id="@+id/btn6"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:layout_weight="1.0"
android:background="@drawable/blank"
android:text="ء" />
</LinearLayout> <LinearLayout
android:layout_width="fill_parent"
android:layout_height="40.0dip"
android:orientation="horizontal" > <Button
android:id="@+id/btn7"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:layout_weight="1.0"
android:background="@drawable/blank"
android:text="خ" /> <Button
android:id="@+id/btn8"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:layout_weight="1.0"
android:background="@drawable/blank"
android:text="ح" /> <Button
android:id="@+id/btn9"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:layout_weight="1.0"
android:background="@drawable/blank"
android:text="ج" /> <Button
android:id="@+id/btn10"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:layout_weight="1.0"
android:background="@drawable/blank"
android:text="ث" /> <Button
android:id="@+id/btn11"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:layout_weight="1.0"
android:background="@drawable/blank"
android:text="ة" /> <Button
android:id="@+id/btn12"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:layout_weight="1.0"
android:background="@drawable/blank"
android:text="ت" />
</LinearLayout> <LinearLayout
android:layout_width="fill_parent"
android:layout_height="40.0dip"
android:orientation="horizontal" > <Button
android:id="@+id/btn13"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:layout_weight="1.0"
android:background="@drawable/blank"
android:text="ش" /> <Button
android:id="@+id/btn14"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:layout_weight="1.0"
android:background="@drawable/blank"
android:text="س" /> <Button
android:id="@+id/btn15"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:layout_weight="1.0"
android:background="@drawable/blank"
android:text="ز" /> <Button
android:id="@+id/btn16"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:layout_weight="1.0"
android:background="@drawable/blank"
android:text="ر" /> <Button
android:id="@+id/btn17"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:layout_weight="1.0"
android:background="@drawable/blank"
android:text="ذ" /> <Button
android:id="@+id/btn18"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:layout_weight="1.0"
android:background="@drawable/blank"
android:text="د" />
</LinearLayout> <LinearLayout
android:layout_width="fill_parent"
android:layout_height="40.0dip"
android:orientation="horizontal" > <Button
android:id="@+id/btn19"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:layout_weight="1.0"
android:background="@drawable/blank"
android:text="غ" /> <Button
android:id="@+id/btn20"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:layout_weight="1.0"
android:background="@drawable/blank"
android:text="ع" /> <Button
android:id="@+id/btn21"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:layout_weight="1.0"
android:background="@drawable/blank"
android:text="ظ" /> <Button
android:id="@+id/btn22"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:layout_weight="1.0"
android:background="@drawable/blank"
android:text="ط" /> <Button
android:id="@+id/btn23"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:layout_weight="1.0"
android:background="@drawable/blank"
android:text="ض" /> <Button
android:id="@+id/btn24"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:layout_weight="1.0"
android:background="@drawable/blank"
android:text="ص" />
</LinearLayout> <LinearLayout
android:layout_width="fill_parent"
android:layout_height="40.0dip"
android:orientation="horizontal" > <Button
android:id="@+id/btn25"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:layout_weight="1.0"
android:background="@drawable/blank"
android:text="ن" /> <Button
android:id="@+id/btn26"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:layout_weight="1.0"
android:background="@drawable/blank"
android:text="م" /> <Button
android:id="@+id/btn27"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:layout_weight="1.0"
android:background="@drawable/blank"
android:text="ل" /> <Button
android:id="@+id/btn28"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:layout_weight="1.0"
android:background="@drawable/blank"
android:text="ك" /> <Button
android:id="@+id/btn29"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:layout_weight="1.0"
android:background="@drawable/blank"
android:text="ق" /> <Button
android:id="@+id/btn30"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:layout_weight="1.0"
android:background="@drawable/blank"
android:text="ف" />
</LinearLayout> <LinearLayout
android:layout_width="fill_parent"
android:layout_height="40.0dip"
android:orientation="horizontal" > <Button
android:id="@+id/btn31"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:layout_weight="1.0"
android:background="@drawable/blank"
android:text="ئ" /> <Button
android:id="@+id/btn32"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:layout_weight="1.0"
android:background="@drawable/blank"
android:text="ى" /> <Button
android:id="@+id/btn33"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:layout_weight="1.0"
android:background="@drawable/blank"
android:text="ي" /> <Button
android:id="@+id/btn34"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:layout_weight="1.0"
android:background="@drawable/blank"
android:text="ؤ" /> <Button
android:id="@+id/btn35"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:layout_weight="1.0"
android:background="@drawable/blank"
android:text="و" /> <Button
android:id="@+id/btn36"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:layout_weight="1.0"
android:background="@drawable/blank"
android:text="ه" />
</LinearLayout> <LinearLayout
android:layout_width="fill_parent"
android:layout_height="40.0dip"
android:orientation="horizontal" > <Button
android:id="@+id/btn37"
android:layout_width="0dp"
android:layout_height="fill_parent"
android:layout_weight="1.0"
android:background="@drawable/delete" /> <Button
android:id="@+id/btn38"
android:layout_width="0dp"
android:layout_height="fill_parent"
android:layout_weight="1.0"
android:background="@drawable/enter"
android:text="\n" /> <Button
android:id="@+id/btn39"
android:layout_width="0dp"
android:layout_height="fill_parent"
android:layout_weight="2.0"
android:background="@drawable/blank"
android:text=" " /> <Button
android:id="@+id/btn40"
android:layout_width="0dp"
android:layout_height="fill_parent"
android:layout_weight="1.0"
android:background="@drawable/blank"
android:text="." /> <Button
android:id="@+id/btn41"
android:layout_width="0dp"
android:layout_height="fill_parent"
android:layout_weight="1.0"
android:background="@drawable/blank"
android:text="،" /> </LinearLayout> </LinearLayout>
六、效果显示
Android简易项目--傻瓜式阿拉伯语输入法(Dummy Arabic Input)的更多相关文章
- android设计的布局在阿拉伯语下界面错乱的解决方法
(1)正在AndroidManifest.xml声明文件的application元素中,增加” android:supportsRtl=true” (2)建] androidの设计的布局在阿拉伯语下界 ...
- NOSDK--关于android傻瓜式的分包设想
一直以来,我总是以“够用就好”为理由,很少再维护过自己的一键打包的项目.最近接触了棱镜的sdk,感觉将apk包上传到棱镜服务器,后台来进行分包这种简单的方式很招人待见. 原理似乎不难,apk即zip压 ...
- M-Renamer方法名修改器,iOS项目方法名重构,Objective-C/Swift,代码模型预判,减少误改的机率,替换速度更快,可视化操作,傻瓜式操作,一键操作,引用处自动修改,马甲包的福音
M-Renamer M-Renamer(Method-Name-Renamer)类方法名修改器,采用链式解析头文件,代码模型预判,减少误改的机率,替换速度更快:可以解析整个项目大多数类的方法,可视化操 ...
- 59.Android开源项目及库 (转)
转载 : https://github.com/Tim9Liu9/TimLiu-Android?hmsr=toutiao.io&utm_medium=toutiao.io&utm_so ...
- Android开源项目及库搜集
TimLiu-Android 自己总结的Android开源项目及库. github排名 https://github.com/trending,github搜索:https://github.com/ ...
- Android 开源项目及库汇总(2)
Android 开源项目及库汇总(2) ListenToCode 2.7 2018.10.10 15:43 字数 8527 阅读 1001评论 0喜欢 29 地图 百度地图– Android百度地图 ...
- 最火的Android开源项目整理
一.代码库 1.from 代码家 整理比较好的源码连接 ******************************************************************* ...
- 最新最全的 Android 开源项目合集
原文链接:https://github.com/opendigg/awesome-github-android-ui 在 Github 上做了一个很新的 Android 开发相关开源项目汇总,涉及到 ...
- Android基础——项目的文件结构(二)
Android基础--项目的文件结构(二) AndroidManifest.xml文件分析 [注]此项目文件结构仅限于Android Studio下的Android项目!!! 在一个Android项目 ...
随机推荐
- 数据结构(C语言版)-第5章 树和二叉树
5.1 树和二叉树的定义 树(Tree)是n(n≥0)个结点的有限集,它或为空树(n = 0):或为非空树,对于非空树T:(1)有且仅有一个称之为根的结点:(2)除根结点以外的其余结点可分为m(m& ...
- 雷林鹏分享:jQuery EasyUI 扩展
jQuery EasyUI 扩展 Portal(制作图表.列表.球形图等) 数据网格视图(DataGrid View) 可编辑的数据网格(Editable DataGrid) 可编辑的树(Editab ...
- Android--------WebView+H5开发仿美团 预加载,加载失败和重新加载
Android嵌入式开发已经占大多数了,很多界面都是以网页的形式展示,WebView可以使得网页轻松的内嵌到app里,还可以直接跟js相互调用. 本博客主要是模仿美团的旅游出行模块的预加载,网页加载失 ...
- jvm看java.lang.OutOfMemoryError: PermGen space
异常现象 异常信息如下 java.lang.OutOfMemoryError: PermGen space at java.lang.ClassLoader.defineClass1(Native M ...
- PHP多种序列化/反序列化的方法(serialize和unserialize函数)
serialize和unserialize函数 这两个是序列化和反序列化PHP中数据的常用函数. <?php $a = array('a' => 'Apple' ,'b' => 'b ...
- phpunit——执行测试文件和测试文件中的某一个函数
phpunit --filter testDeleteFeed // 执行某一个测试函数 phpunit tests/Unit/Services/Feed/FeedLogTest.php // 执行某 ...
- Python mongoDB读取
class db_class(): def __init__(self): mongo_DB='test1' self.mongo_TABEL='test' client=pymongo.MongoC ...
- php 中输入输出提交
</head> <body> 输出的两个位置 <? echo $_POST['sub']; ?> <form action="" meth ...
- element-ui radio 再次点击取消选中
<el-radio-group v-model="radio2"> <el-radio @click.native.prevent="clickitem ...
- sql百万级查询优化(转)
< 数据库技术内幕 > 处理百万级以上的数据提高查询速度的方法: 1.应尽量避免在 where 子句中使用!=或<>操作符,否则将引擎放弃使用索引而进行全表扫描. 2.对查询进 ...