实现Android键盘的中英文适配
作者:laozhang 发布时间:2022-03-27 20:40:33
大家在进行Android项目开发的时候经常会遇到中文输入和英文输入切换的情况,本篇内容教给大家实现Android下自动识别中英文键盘的功能。
英文环境下,密码框字体和一般字体不一致问题
1、xml中不能设置inputType 属性、或者password属性
2、中文环境中设置inputType可以
3、当要是适配英文,只能在Java代码设置
android开发EditText输入时弹出数字输入键盘(适配英文环境)
首先设置只能输入数字
<EditText
android:id="@+id/second_password"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:digits="1234567890"
android:maxLength="6"
android:paddingLeft="@dimen/dp_20"
android:singleLine="true"
android:textSize="@dimen/sp_14"/>
重点是
android:digits="1234567890"
EditText中android:digits属性的作用
是设置允许输入哪些字符。如“1234567890.+-*/%\n()”
再在代码里面设置输入法类型:
secondPassword.setInputType(EditorInfo.TYPE_CLASS_PHONE);//数字键盘
secondPassword.setTransformationMethod(new PasswordTransformationMethod());//密文
则如果该EditText获得焦点,会弹出数字输入法的模拟键盘
请在xml中设置inputType属性即可
1、API中有,列举出来inputType的值都包括哪些。
android:inputType=”none”
android:inputType=”text”
android:inputType=”textCapCharacters” 字母大写
android:inputType=”textCapWords” 首字母大写
android:inputType=”textCapSentences” 仅第一个字母大写
android:inputType=”textAutoCorrect” 自动完成
android:inputType=”textAutoComplete” 自动完成
android:inputType=”textMultiLine” 多行输入
android:inputType=”textImeMultiLine” 输入法多行(如果支持)
android:inputType=”textNoSuggestions” 不提示
android:inputType=”textUri” 网址
android:inputType=”textEmailAddress” 电子邮件地址
android:inputType=”textEmailSubject” 邮件主题
android:inputType=”textShortMessage” 短讯
android:inputType=”textLongMessage” 长信息
android:inputType=”textPersonName” 人名
android:inputType=”textPostalAddress” 地址
android:inputType=”textPassword” 密码
android:inputType=”textVisiblePassword” 可见密码
android:inputType=”textWebEditText” 作为网页表单的文本
android:inputType=”textFilter” 文本筛选过滤
android:inputType=”textPhonetic” 拼音输入
//数值类型
android:inputType=”number” 数字
android:inputType=”numberSigned” 带符号数字格式
android:inputType=”numberDecimal” 带小数点的浮点格式
android:inputType=”phone” 拨号键盘
android:inputType=”datetime” 时间日期
android:inputType=”date” 日期键盘
android:inputType=”time” 时间键盘
2、Enter键图标的设置
想象一下,当我们在EditText中完成了输入,想要以输入的内容作为关键字进行搜索时,却需要按下“完成”图标的Enter按键,显然这不符合良好的用户体验设计。那么,怎么样来改变Enter按键的图标呢?
Android为我们提供了android:imeOptions来实现这一功能。
android:imeOptions的常用参数有以下一些:
normal(常规),
actionUnspecified(未指定),
actionNone(没有动作),
actionGo(去往),
actionSearch(搜索),
actionSend(发送),
actionNext(下一个),
actionDone(完成),
flagNoExtractUi,flagNoAccessoryAction,flagNoEnterAction等,其对应的Enter键
图标如图所示:
3、设置软键盘交互样式
有时键盘弹出需要把界面挤压到上端或直接覆盖界面。 可在AndroidManifest.xml 对应的 Activity 里添加上这条属性:
android:windowSoftInputMode=”参数”
参数详情如下,多个参数之间可用‘|'隔开:
【A】stateUnspecified:软键盘的状态并没有指定,系统将选择一个合适的状态或依赖于主题的设置
【B】stateUnchanged:当这个activity出现时,软键盘将一直保持在上一个activity里的状态,无论是隐藏还是显示
【C】stateHidden:用户选择activity时,软键盘总是被隐藏
【D】stateAlwaysHidden:当该Activity主窗口获取焦点时,软键盘也总是被隐藏的
【E】stateVisible:软键盘通常是可见的
【F】stateAlwaysVisible:用户选择activity时,软键盘总是显示的状态
【G】adjustUnspecified:默认设置,通常由系统自行决定是隐藏还是显示
【H】adjustResize:该Activity总是调整屏幕的大小以便留出软键盘的空间
【I】adjustPan:当前窗口的内容将自动移动以便当前焦点从不被键盘覆盖和用户能总是看到输入内容的部分
EditText默认不弹出软件键盘:
方法一:
在 AndroidMainfest.xml 中选择哪个 activity,设置windowSoftInputMode 属性为 adjustUnspecified|stateHidden
例如:
<activity android:name=".Main"
android:label="@string/app_name"
android:windowSoftInputMode="adjustUnspecified|stateHidden"
android:configChanges="orientation|keyboardHidden">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
方法二:
让EditText失去焦点,使用EditText的clearFocus方法
例如:
EditText edit=(EditText)findViewById(R.id.edit);
edit.clearFocus();
方法三:
强制隐藏Android输入法窗口
例如:
EditText edit=(EditText)findViewById(R.id.edit);
InputMethodManager imm = (InputMethodManager)getSystemService(Context.INPUT_METHOD_SERVICE);
imm.hideSoftInputFromWindow(edit.getWindowToken(),0);
4、自动将输入的小写字母转换为大写
自动转化为大写字母。但是转换出来的只是显示为大写字母,存的还是小写字母。
class InputLowerToUpper extends ReplacementTransformationMethod{
@Override
protected char[] getOriginal() {
char[] lower = { 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j','k','l','m','n','o','p','q','r','s','t','u','v','w','x','y','z' };
return lower;
}
@Override
protected char[] getReplacement() {
char[] upper = { 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J','K','L','M','N','O','P','Q','R','S','T','U','V','W','X','Y','Z' };
return upper;
}
}
editText.setTransformationMethod(new InputLowerToUpper());
也可通过设置 android:inputType=”textCapCharacters”可行,但是就不能一块使用密码键盘了。
//下面这种方法才是真正的将输入的小写字母转换为大写字母
addressText.addTextChangedListener(new TextWatcher() {
@Override
public void onTextChanged(CharSequence s, int start, int before, int count) {
// TODO Auto-generated method stub
addressText.removeTextChangedListener(this);//解除文字改变事件
addressText.setText(s.toString().toUpperCase());//转换
addressText.setSelection(s.toString().length());//重新设置光标位置
addressText.addTextChangedListener(this);//重新绑
// licensePlateNumber = addressText.getText().toString().trim();
}
@Override
public void beforeTextChanged(CharSequence s, int start, int count, int after) {
// TODO Auto-generated method stub
}
@Override
public void afterTextChanged(Editable arg0) {
// TODO Auto-generated method stub
}
});
来源:https://mp.weixin.qq.com/s/Yncr0XZ4MCWZH2vzTVyYJw
猜你喜欢
- 获取方法的相关信息的两种形式反射是一种允许用户获得类信息的C#功能,Type对象映射它代表的底层对象;在.Net 中, 一旦获得了Type对
- 前言:在没有接触java8的时候,我们遍历一个集合都是用循环的方式,从第一条数据遍历到最后一条数据,现在思考一个问题,为什么要使用循环,因为
- 一段看似平平无奇的代码Classroom classroom = this.getOne( Wrappers.<Class
- 先上效果图:如图,可实现设置:总流程数、已完进度程数、已完成颜色,各个标题github地址戳这里使用方法1.导入compile 'c
- 首先是.select在MP查询中,默认查询所有的字段,如果有需要也可以通过select方法进行指定字段。其中要注意的细节:wrapper.s
- 此问题背景产生于近期需要上线的一个功能的埋点;主要表现就是在应用启动之后的一段时间内,内存使用一直呈现递增趋势。下图为场景复线后,本地通过
- 前言Mybatis真正强大的地方在于SQL映射语句,这也是它的魅力所在。相对于它强大的功能,SQL映射文件的配置却非常简单,我上篇文章语句讲
- 环境Linux版本:CentOS 6.5、Ubuntu 12.04.5 JDK版本:JDK 1.7目录方法一:手动解压JDK的压缩包,然后设
- java StringBuilder类的详解及简单实例实现代码:public class StringBuilder
- 1. 引入当我们编写一个类时,其实就是在描述其对象的属性和行为,而并没有产生实质上的对象, 只有通过new关键字才会产生出对象,这时系统才会
- * 是许多框架底层实现的基础,比如Spirng的AOP等,其实弄清楚了 * 的实现原理,它就没那么神奇了,下面就来通过案例和分析JDK
- 本文实例讲述了C#实现客户端弹出消息框封装类。分享给大家供大家参考。具体如下:asp.net在服务器端运行,是不能在服务器端弹出对话框的,但
- 前言之前几篇我们介绍了贝塞尔曲线的原理、绘制曲线和动效实现,这些都是代码预设好的,如果我们要根据需要自行绘制曲线,就需要使用交互来实现了。本
- 使用Java语言编写一个模拟网上超市购物结算功能的程序,要求程序运行后有一个图形用户界面,可供用户输入购买的各种商品相关信息,最后给出用户的
- 1.object:匿名内部类在Android最常用的匿名内部类之一就是点击事件,用Java语言写的话就是下面这样:public interf
- 在intellij中忽略提交文件,分两种情况,文件没有纳入版本管理第一种方法文件还没有纳入版本管理,这种通过 svn的ignore配置ver
- 1. 引入jar包pom.xml文件<?xml version="1.0" encoding="UTF-
- 对于yield关键字我们首先看一下msdn的解释:如果你在语句中使用 yield 关键字,则意味着它在其中出现的方法、运算符或 get 访问
- 本文实例为大家分享了java桌球小游戏的具体代码,供大家参考,具体内容如下源码:import java.awt.*;import javax
- 本文实例讲述了Java HashMap三种循环遍历方式及其性能对比。分享给大家供大家参考,具体如下:HashMap的三种遍历方式(1)for