问题描述
要使焦点落到TextField控件时启用123输入法用iTextField.setInitialInputMode("IS_LATIN_DIGITS")为什么有的手机不好使?回到默认中文输入法?用setInitialInputMode("IS_LATIN_DIGITS")和setInitialInputMode("IS_FULLWIDTH_DIGITS")有什么区别?项目是GBK的
解决方案
解决方案二:
TextField是可能够放入Form中的可编辑的文本框组件。它可以通过一段文本初始化。TextField包含一个最大大小,该大小就是任何时候可以保存在其中的字符量(即容量)。当TextField实例构建时,当用户在TextField中编辑文本时,以及当应用程序调用TextFiled方法修改其内容时,大小都会受到限制。最大大小是最大的可存储大小并且和任何时候显示的字符数量大小无关。显示的字符数量和它们如果按行列安排是由设备决定的。系统会为最大大小设定界限,实际设置的最大大小会比应用程序请求的要小。实际设置的值将由getMaxSize()反映出来。一个健全的应用程序应当把这个值和请求的最大大小值相比较并在它们不相等时进行处理。输入限制TextField和TextBox共享输入限制的概念。不同的限制允许应用程序要求用户输入的限制不同。系统来执行应用程序请求的用户输入限制。比如,如果应用程序请求在TextField上设置NUMERIC的限制,系统必须只允许输入数字。实际的文本对象的内容由应用程序设置和修改,并通过TextBos和TextField的API反馈给应用程序。显示的内容有可能和实际的内容有差别,如果系统选择用适合文本对象的特殊格式。比如,一个PHONENUMBER域根据电话号码的书写习惯,把国家号,区域号,前缀分组,通过混合显示分隔符和数字的方式显示。任何显示出来的空格或是分隔符不被认为是文本对象的实际内容。比如,一个PHONENUMBER限制的文本对象可能按如下方式显示:(408)555-1212但是实际的通过API的应用程序可见的内容是字符串”4085551212”。Size方法反映的是实际内容里的字符数量,不是被显示出来的字符数量,所以在这里szie方法将反回10。一些限制,比如DECIMAL,需要系统对文本对象的内容执行语法有效性检查。语法检查将对实际内容执行,就像上面指出的和显示的内容会有所不同。语法检查还会对传递给构造函数的初始值起作用,同样对所有改变文本对象内容的方法起作用。方法和构造器抛出IllegalArgumentException如果它们造成文本框的内容不符合语法要求。传递给setConstraints()的值由上面提到的限制集合组成,同样由不同的标志位来修正文本输入和显示行为。限制集的值是一个值的低16位,并且可以通过按位析取操作符(&)同一个CONSTRAINT_MASK常量组合。限制集合如下:ANYEMAILADDRNUMERICPHONENUMBERURLDECIMAL修正标志排列在限制值的高16位上,就是说,那些在CONSTRAINT_MASK常量中的补充值。修正符可以通过把限制值和一个修正标志与(&)操作单独测试。修正标志如下:PASSWORDUNEDITABLESENSITIVENON_PREDICTIVEINITIAL_CAPS_WORDINITIAL_CAPS_SENTENCE输入模式TextField和TextBox共同拥有输入模式的概念。应用程序可以要求系统在用户编辑TextField或是TextBox时执行特定的输入模式。输入模式是存在于特定设备上的文本输入的概念。应用程序不是直接请求一个输入模式,因为文本输入的用户界面在不同的设备上并不相同。取而代之,应用程序可以方便的请求特定的字符输入。这可以通过向setInitialInputMode()传递一个Unicode字符字集的名字来实现。对这个方法的调用会要求系统为下一个输入设置输入模式以方便用户输入那个字符子集中的字符。应用程序还可以通过设置限制值中的修正标志来要求输入模式包含特定的行为字符。请求的输入模式应该在TextBox或是TextField对象被编辑的时候使用。如果用户在前一个交互过程中改变了输入模式,应用程序请求的用户模式将替代前一个用户设置的输入模式。然而,输入模式不是被限制的,用户可以在编辑的任何时候改变输入模式。如果编辑正在被处理,对setInitialInputMode的调用将不会影响当前的输入模式,但是将在下次用户编辑文本对象的时候起作用。初始的输入模式是用系统内定的。如果系统不能提供一个合适的用户请求的模式,将使用默认的输入模式。应用程序请求的用户输入模式并不是对用户可输入的字符的一种限制。用户必须被允许切换输入模式来输入符合输入限制的任何字符。输入限制比输入模式的优先级要高,而且系统可以拒绝提供一个特定的输入模式如果它合当前的输入限制不符。比如,如果当前的输入限制是ANY,调用setInitialInputMode(“MIDP_UPPERCASE_LATIN”);将把输入模式设置成允许输入大定拉丁字符。这里不会限制这种输入,并且用户可以输入数字或是小写拉丁字母。但是,如果当前的限制是NUMERIC,系统就会忽略允许大写拉丁字符输入的请求,因为这些字符在NUMERIC限制下是不被允许输入的。这时,系统会用数字输入模式来代替,因为这样一个输入模式在NUMERIC限制下总是适用的。一个字符串用来命名传递给setInitialInputMode()方法参数的Unicode字符子集。字符串是大小写相关的。Unicode字符块通过向J2SE中java.lang.Character.UnicodeBlock类定义的表示Unicode字符块的字符串添加前缀”UCB_”来表示。所有Unicode字符块可以用这种方式命名。为了方便,把最常用的Unicode字符块列在下面:UCB_BASIC_LATINUCB_GREEKUCB_CYRILLICUCB_ARMENIANUCB_HEBREWUCB_ARABICUCB_DEVANAGARIUCB_BENGALIUCB_THAIUCB_HIRAGANAUCB_KATAKANAUCB_HANGUL_SYLLABLES输符子集可以通过向J2SE中java.awt.im.InputSubset类定义的字符串添加”IS_”来定义。所有定义过的子集都可以使用。为了方便,把最常用的Unicode字符块列在下面:IS_FULLWIDTH_DIGITSIS_FULLWIDTH_LATINIS_HALFWIDTH_KATAKANAIS_HANJAIS_KANJIIS_LATINIS_LATIN_DIGITSIS_SIMPLIFIED_HANZIIS_TRADITIONAL_HANZIMIDP也定义了下列的字符子集MIDP_UPPERCASE_LATIN-IS_LATIN中符合大写拉丁字符的子集MIDP_LOWERCASE_LATIN–IS_LATIN中符合小写拉丁字符的子集最后,系统特定的字符子集可以通过向字符串添加”X_”的方法定义。为了必免名字空间冲突,建议系统特定名字在”X_”后包含定义者的公司或是组织名称。比如,一个日语应用程序可能特定的TextField,应用程序在这里主要用来输入日语中的外来字。应用程序可以通过下面的方法请求一个容易使用的平假名输入:textfield.setInitialInputMode(“UCB_HIRAGANA”);系统提示系统不需要编译上面显示的所有字符串。它们只需要编译它们能够支持的Unicode字符子集的字符串。如果应用程序传递的子集名称和已知的子集名称不同,请求只是简单的被忽略而不产生错误,而且默认输入模式会被使用。这使得系统很便宜的支持这种特性。然而,这会造成应用程序不能确定它的请求是否被接受,也不能确定它请求的Unicode字符是否是一个有效的子集。本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/loriwang/archive/2006/04/20/670672.aspx
解决方案三:
TextField
解决方案四:
一楼写的很全面啊!
解决方案五:
1L是强人··
解决方案六:
谢谢1楼,谢谢各位。记得在哪里看到过如何枚举手机里支持的输入法名称如“IS_FULLWIDTH_DIGITS”,但现在找不到了,现在的问题是造成有的手机用setInitialInputMode失效,是因为手机没提供相应输入法标示,还是我程序的用法不对,如Unicode字符,字符集等问题。
解决方案七:
顶
解决方案八:
标记一下,谢谢
解决方案九:
学习了……