Android学习之 IME<输入法:Input Method Editor>
2014-01-23 15:54
435 查看
原文转载至 http://blog.csdn.net/flowingflying/article/details/6307322 —— 向大神学习、尊重原作。
对Android设备,可能是无物理键盘,可能带键盘,也可能带数字键盘,这些都是可以处理的。
inputType:IME可自动适配所设的输入类型
如果没有物理键盘,当用户进入EditText的时候,将调起IME(Input Method Editor)。一般情况下,IME都是智能地弹出,并不需要我们作任何的处理,但是在某些特定的情况下,例如一个多行EditText中,IME会覆盖部分的部分的内容,这时候,我们就需要考虑了。此外还有密码输入,限制类型输入(数字,电话好吗,日期,时间等),可以通过android:inputType来进行设定,inputType里面可以设置多个属性,实行“|”来分割,主义属性和"|"之间不要有空格。下面是一个例子:
<?xml version="1.0" encoding="utf-8"?>
<TableLayout ...... android:stretchColumns="1">
<TableRow>
<TextView android:text="No Special rules:" />
<EditText /> <!--inputType缺省为text方式-->
</TableRow>
<TableRow>
<TextView android:text="Email address:" />
<EditText android:inputType="text|textEmailAddress" />
</TableRow>
<TableRow>
<TextView android:text="Signed decimal number:" />
<EditText android:inputType="number|numberSigned|numberDecimal" />
</TableRow>
<TableRow>
<TextView android:text="Date:" />
<EditText android:inputType="date" />
</TableRow>
<TableRow>
<TextView android:text="Multi-line text:" />
<EditText android:inputType="text|textMultiLine|textAutoCorrect" android:minLines="3" android:gravity="top"/>
</TableRow>
</TableLayout>
在《Begining Book》中给出的IME和我的模拟器的不一样,模拟器采用的是T9数字键盘方式,由于设置了不同的显示要求,因此键盘的出现也会有所不同。如下两图所示:
IME可通过确认键进行事件触发
最右下角的button成为accessory button,也就是确认键,我们可以通过android:imeOptions来设置相关的处理,例如:
<TextView android:text="Signed decimal number:" />
<EditText android:inputType="number|numberSigned|numberDecimal"
android:imeOptions="actionDone"/>
缺省地,按下accessroy button,将会focus到下一个editText,但是我们可以定制这个行文。例如上面的例子,当我们按确认键时,IME键盘将会消失,表示IME已经处理完了。我们看另外一个例子:
<EditText android:id="@+id/c10_send"
android:inputType="text|textEmailAddress"
android:imeOptions="actionSend"/>
这是一个Email地址格式,我们希望用户按了IME的确认键之后可以进行触发,在程序中如下处理,我们可以监测到IME_ACTION_SEND的actionId。:
TextView edit = (TextView)findViewById(R.id.c10_send);
edit.setOnEditorActionListener(new TextView.OnEditorActionListener() {
public boolean onEditorAction(TextView v, int actionId, KeyEvent event) {
if(actionId == EditorInfo.IME_ACTION_SEND)
Log.d("WEI","Receive ime : IME_ACTION_SEND ");
return false;
}
});
IME的适配
在上面的例子中,如果我们点击第一个editText,IME会overlay最下面的widget,如果我们点击最下面的editText,整个layout就会向上scroll,这种成为pan适配方式。Android可以resize我们的acitivity,使其变小以便IME可以在activity的下面。这种是resize适配。在landscape模式(横屏)模式下,Android有可能会将IME全屏,覆盖整个acivity,这允许更大的软键盘方便用户输入。
一般的,Android会根据layout的情况选择pan方式或者resize方式,如果我们需要指定,可以在AndroidManifest.xml文件中的acivity里面设置android:windowSoftInputMode属性,下面是一个例子:
<activity android:name=".Chapter10.Chapter10Test2" android:label="@string/chapter_10_test2"
android:windowSoftInputMode="adjustResize"/>
我们将我们上面的例子最后一个EditText中android:minLines="5",使他具有更大空间,下面的两个图,左图采用缺省模式,右图,强制指定采用 android:windowSoftInputMode="adjustResize"模式。
原文转载至 http://blog.csdn.net/flowingflying/article/details/6307322 —— 向大神学习、尊重原作。
对Android设备,可能是无物理键盘,可能带键盘,也可能带数字键盘,这些都是可以处理的。
inputType:IME可自动适配所设的输入类型
如果没有物理键盘,当用户进入EditText的时候,将调起IME(Input Method Editor)。一般情况下,IME都是智能地弹出,并不需要我们作任何的处理,但是在某些特定的情况下,例如一个多行EditText中,IME会覆盖部分的部分的内容,这时候,我们就需要考虑了。此外还有密码输入,限制类型输入(数字,电话好吗,日期,时间等),可以通过android:inputType来进行设定,inputType里面可以设置多个属性,实行“|”来分割,主义属性和"|"之间不要有空格。下面是一个例子:
<?xml version="1.0" encoding="utf-8"?>
<TableLayout ...... android:stretchColumns="1">
<TableRow>
<TextView android:text="No Special rules:" />
<EditText /> <!--inputType缺省为text方式-->
</TableRow>
<TableRow>
<TextView android:text="Email address:" />
<EditText android:inputType="text|textEmailAddress" />
</TableRow>
<TableRow>
<TextView android:text="Signed decimal number:" />
<EditText android:inputType="number|numberSigned|numberDecimal" />
</TableRow>
<TableRow>
<TextView android:text="Date:" />
<EditText android:inputType="date" />
</TableRow>
<TableRow>
<TextView android:text="Multi-line text:" />
<EditText android:inputType="text|textMultiLine|textAutoCorrect" android:minLines="3" android:gravity="top"/>
</TableRow>
</TableLayout>
在《Begining Book》中给出的IME和我的模拟器的不一样,模拟器采用的是T9数字键盘方式,由于设置了不同的显示要求,因此键盘的出现也会有所不同。如下两图所示:
IME可通过确认键进行事件触发
最右下角的button成为accessory button,也就是确认键,我们可以通过android:imeOptions来设置相关的处理,例如:
<TextView android:text="Signed decimal number:" />
<EditText android:inputType="number|numberSigned|numberDecimal"
android:imeOptions="actionDone"/>
缺省地,按下accessroy button,将会focus到下一个editText,但是我们可以定制这个行文。例如上面的例子,当我们按确认键时,IME键盘将会消失,表示IME已经处理完了。我们看另外一个例子:
<EditText android:id="@+id/c10_send"
android:inputType="text|textEmailAddress"
android:imeOptions="actionSend"/>
这是一个Email地址格式,我们希望用户按了IME的确认键之后可以进行触发,在程序中如下处理,我们可以监测到IME_ACTION_SEND的actionId。:
TextView edit = (TextView)findViewById(R.id.c10_send);
edit.setOnEditorActionListener(new TextView.OnEditorActionListener() {
public boolean onEditorAction(TextView v, int actionId, KeyEvent event) {
if(actionId == EditorInfo.IME_ACTION_SEND)
Log.d("WEI","Receive ime : IME_ACTION_SEND ");
return false;
}
});
IME的适配
在上面的例子中,如果我们点击第一个editText,IME会overlay最下面的widget,如果我们点击最下面的editText,整个layout就会向上scroll,这种成为pan适配方式。Android可以resize我们的acitivity,使其变小以便IME可以在activity的下面。这种是resize适配。在landscape模式(横屏)模式下,Android有可能会将IME全屏,覆盖整个acivity,这允许更大的软键盘方便用户输入。
一般的,Android会根据layout的情况选择pan方式或者resize方式,如果我们需要指定,可以在AndroidManifest.xml文件中的acivity里面设置android:windowSoftInputMode属性,下面是一个例子:
<activity android:name=".Chapter10.Chapter10Test2" android:label="@string/chapter_10_test2"
android:windowSoftInputMode="adjustResize"/>
我们将我们上面的例子最后一个EditText中android:minLines="5",使他具有更大空间,下面的两个图,左图采用缺省模式,右图,强制指定采用 android:windowSoftInputMode="adjustResize"模式。
原文转载至 http://blog.csdn.net/flowingflying/article/details/6307322 —— 向大神学习、尊重原作。
相关文章推荐
- android输入法(2)–InputMethodManager
- Android窗口管理服务WindowManagerService对输入法窗口(Input Method Window)的管理分析
- android edittext inputType imeOptions 学习
- <android 笔记>通知栏学习
- Android学习之 移动应用<App>微信支付集成小结
- Android隐藏输入法键盘(hideSoftInputFromInputMethod没有效果)
- Caused by: java.lang.NoSuchMethodException: <init> [class android.content.Context, interface android
- android学习记录<二>
- Android开源中国客户端学习 微博分享模块 <8>
- org.eclipse.graphiti.ui.editor.DiagramEditorInput.<init>(Lorg/eclipse/emf/common/util/URI;Ljava/lang
- Android窗口管理服务WindowManagerService对输入法窗口(Input Method Window)的管理分析
- Android隐藏输入法键盘(hideSoftInputFromInputMethod没有效果)
- Android NDK学习 <三> Android.mk实例和NDK实用技巧
- Android React-Native系列之<二>零基础学习React-Native控件之View
- android输入法–InputMethodManager
- Android 5.0学习<三>
- <<Android源码设计模式解析与实战>>读书笔记----- Android NDK开发学习
- Android NDK学习 <二> Android.mk的制作
- Android网络框架volley学习(九)请求结果Response<T>简析
- <学习html>第六天笔记-表单标签(input控件、label标签)