我正在为多种语言制作Android应用。我想根据键盘语言将EditText视图的inputType设置为不同。在我试过的XML文件中:
android:inputType="@string/xyz"
并且在Strings资源文件中,字符串xyz将是
<string name="xyz">number</string>
我希望这是一个很容易根据语言改变输入类型的想法。例如,如果语言是英语,我会将xyz设置为字母,但在日语中我会将xyz设置为数字。我试图避免以编程方式执行此操作,因为一旦我开始在代码中输入输入过滤器,我的XML设置中的大部分都会被忽略,即使它们没有被新代码直接覆盖。
当我尝试将此字符串资源调用到inputType时,我收到错误。非常感谢任何帮助。
答案 0 :(得分:3)
是的,您可以通过编程方式实现此目标,因为inputType
可以获取integer
值。这是实现它实际上很容易。
TYPE_CLASS_TEXT具有常数值: 1
TYPE_CLASS_NUMBER具有固定值: 2
这是您的strings.xml(您将要本地化)的值: 例如:
英语(文本)字符串中的input_type值:
<string name="input_type">1</string>
日语(数字)字符串中的input_type值:
<string name="input_type">2</string>
在Activity
中,声明您的EditText
并从strings.xml设置inputType
,以便根据本地化进行设置:
editText = (EditText)findViewById(R.id.editText1);
editText.setInputType(Integer.parseInt(getResources().
getString(R.string.input_type)));
答案 1 :(得分:0)
不,你不能这样做。 android:inputType
属性定义为使用也由Android定义的标志。您不能为此属性提供任意字符串值,您只能使用这些预定义的标志。
答案 2 :(得分:0)
您只能通过XML执行此操作,但必须使用integer
而不是string
资源:
在您的值文件夹
中<integer name="myInputType">12</integer> <!-- numberPassword -->
在您的布局中
android:inputType="@integer/myInputType"
此处列出了整数值:https://developer.android.com/reference/android/widget/TextView.html#attr_android:inputType
答案 3 :(得分:0)
此外,您可以为每个语言限定符使用(和覆盖)EditText(带有attrs)的样式
f.e。
<style name="PinCodeInputType">
<item name="android:inputType">numberDecimal</item>
</style>
<EditText
android:id="@+id/code"
style="@style/PinCodeInputType"
android:layout_width="match_parent"
android:layout_height="wrap_content"
/>