是否可以将android:inputType与字符串资源一起使用

时间:2014-04-29 11:11:55

标签: android xml android-edittext android-inputtype

我正在为多种语言制作Android应用。我想根据键盘语言将EditText视图的inputType设置为不同。在我试过的XML文件中:

android:inputType="@string/xyz"

并且在Strings资源文件中,字符串xyz将是

<string name="xyz">number</string>

我希望这是一个很容易根据语言改变输入类型的想法。例如,如果语言是英语,我会将xyz设置为字母,但在日语中我会将xyz设置为数字。我试图避免以编程方式执行此操作,因为一旦我开始在代码中输入输入过滤器,我的XML设置中的大部分都会被忽略,即使它们没有被新代码直接覆盖。

当我尝试将此字符串资源调用到inputType时,我收到错误。非常感谢任何帮助。

4 个答案:

答案 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"
    />