【问题标题】:Is it possible to use android:inputType with a string resource是否可以将 android:inputType 与字符串资源一起使用
【发布时间】:2014-04-29 11:11:55
【问题描述】:

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

android:inputType="@string/xyz"

在字符串资源文件中,字符串 xyz 是

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

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

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

【问题讨论】:

    标签: android xml android-edittext android-inputtype


    【解决方案1】:

    是的,您可以通过编程方式实现此目的,因为 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)));
    

    【讨论】:

    • 谢谢。这肯定是有帮助的,但是这仍然允许我从 xml 中为 edittext 指定接受的字符吗?即,机器人:数字。或者这段代码会在xml中否定它吗?例如,我想只接受 abcde。这一直有效,直到我在代码中设置输入过滤器。我现在试试你的代码看看。如果我不能在 xml 中使用,我正在尝试弄清楚如何限制代码中的特定字符。但是。 Inputfilter 仍然让我感到困惑。
    • 这仅适用于单个属性;对于更复杂的情况,例如textNoSuggestions|textVisiblePassword|number,此解决方案将无法正常工作。
    【解决方案2】:

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

    【讨论】:

      【解决方案3】:

      您只能通过 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

      【讨论】:

        【解决方案4】:

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

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

        【讨论】:

          猜你喜欢
          • 2021-01-02
          • 2020-01-18
          • 2021-05-12
          • 2016-08-22
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2022-01-13
          • 2012-09-04
          相关资源
          最近更新 更多