3

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

android:inputType="@string/xyz"

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

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

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

但是,当我尝试将此字符串资源调用到 inputType 时出现错误。任何帮助将不胜感激。

4

4 回答 4

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并设置inputTypefrom strings.xml 以便根据本地化进行设置:

editText = (EditText)findViewById(R.id.editText1);
editText.setInputType(Integer.parseInt(getResources().
                                       getString(R.string.input_type)));
于 2014-04-29T11:40:01.703 回答
0

不,你不能这样做。该android:inputType属性被定义为使用同样由 Android 定义的标志。您不能为此属性提供任意字符串值,您只能使用那些预定义的标志。

于 2014-04-29T11:18:16.683 回答
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

于 2017-06-22T14:11:43.537 回答
0

此外,您可以为每个语言限定符使用(和覆盖)您的 EditText(带有 attrs)样式

 <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"
    />
于 2018-05-31T16:39:12.633 回答