Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/230.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 默认情况下使用数字键盘编辑文本,但允许使用字母字符_Android_Android Keypad - Fatal编程技术网

Android 默认情况下使用数字键盘编辑文本,但允许使用字母字符

Android 默认情况下使用数字键盘编辑文本,但允许使用字母字符,android,android-keypad,Android,Android Keypad,我有一个编辑文本框,我想要当它被选择为数字键盘时出现的默认键盘,因为大多数时候用户都会输入数字。但是,如果用户需要,我也希望允许他们输入字母字符。使用android:inputType=“number”将输入限制为仅数字。我有哪些选项?基本上,EditText inputtype用于设置EditText中的输入类型 android:inputtype的可能值为: 正文 textCapCharacters 文本大写词 文本和句子 文本自动更正 文本自动完成 文本多行 textImeMultiLi

我有一个编辑文本框,我想要当它被选择为数字键盘时出现的默认键盘,因为大多数时候用户都会输入数字。但是,如果用户需要,我也希望允许他们输入字母字符。使用android:inputType=“number”将输入限制为仅数字。我有哪些选项?

基本上,EditText inputtype用于设置EditText中的输入类型

android:inputtype
的可能值为:

  • 正文
  • textCapCharacters
  • 文本大写词
  • 文本和句子
  • 文本自动更正
  • 文本自动完成
  • 文本多行
  • textImeMultiLine
  • 文本建议
  • 纹理
  • 文本电子邮件地址
  • 文本邮件主题
  • 短信
  • 短信
  • textPersonName
  • 纺织服装
  • 文本密码
  • textVisiblePassword
  • 文本WebEditText
  • 文本过滤器
  • 文本语音
  • 编号
  • 数字中心
  • 电话
  • 日期时间
  • 日期
  • 时间
然后可以使用示例中所示的任何值:

<EditText android:id="@+id/EditText01"
 android:layout_height="wrap_content"
 android:layout_width="fill_parent"
 android:inputType="number"
 android:text="1212223"/>

不幸的是,这是不可能的,因为EditText只能设置一个inputType。以下仅显示按钮上的字母字符

<EditText
        android:id="@+id/editText1"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:inputType="text|number" />

这样用户也可以切换到字母字符。

您可以按照Paresh Mayani的答案进行操作

在“建议”中,您可以根据用户的选择,对inputType文本和数字使用
android:inputType=“textpoinical”

希望你能理解我的观点。

你可以试试设置---


对于

为什么不使用一个切换按钮:

  • 将输入类型设置为仅允许数值
  • 设置允许使用QWERTY键盘的输入类型
  • 或设置其他输入类型(如果需要)

这样,您可以将数字键盘设置为默认值,然后用户可以通过按下按钮进行更改。

在您的文本视图代码中,删除android:inputType中的“文本”

应该是,

<EditText
        android:id="@+id/editText1"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:inputType="number" />

在OnCreate In活动中执行以下操作:

    t = (EditText) findViewById(R.id.test);
    t.setKeyListener(new KeyListener() {

        @Override
        public boolean onKeyUp(View view, Editable text, int keyCode, KeyEvent event) {
            return false;
        }

        @Override
        public boolean onKeyOther(View view, Editable text, KeyEvent event) {
            return false;
        }

        @Override
        public boolean onKeyDown(View view, Editable text, int keyCode, KeyEvent event) {
            if (keyCode == 67) { // Handle backspace button =)
                if (text.length() > 0) {
                    t.setText(text.subSequence(0, text.length() - 1));
                    t.setSelection(text.length()-1);
                }
            }
            return false;
        }

        @Override
        public int getInputType() {
            return InputType.TYPE_CLASS_NUMBER;
        }

        @Override
        public void clearMetaKeyState(View view, Editable content, int states) {

        }
    });
在本例中,您键入的是
number
,android将显示数字键盘,但您可以输入任何您想要的内容。
此外,您还可以根据自己的意愿覆盖其他方法。

华硕平板电脑具有该功能,他们定制了默认键盘。键盘上只包含数字和字母。我认为您的需求解决方案太难定制默认键盘了

以下是您需要的:

用xml定义
EditText

<EditText
    android:id="@+id/etTest"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:ems="10"
    android:hint="@string/hint">

</EditText>
<EditText 
    android:id="@+id/txtOppCodigoCliente"
    android:inputType="textVisiblePassword"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:maxLength="11"
    android:hint="@string/strCodigoCliente"/>

无论何时单击编辑文本,都可以输入数字和字母!(首先显示数字键盘)

我建议一个更强大的解决方案:

让用户能够选择输入类型:

需要的修复

-更好地处理显示/隐藏输入选择按钮

-当输入类型为字母时,可能会删除建议

活动内容如下:

package mobi.sherif.numberstexttextview;

import android.os.Bundle;
import android.app.Activity;
import android.text.InputType;
import android.view.View;
import android.view.View.OnFocusChangeListener;
import android.widget.EditText;

public class MainActivity extends Activity {

    EditText mEdit;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        mEdit = (EditText) findViewById(R.id.input);
        mEdit.setOnFocusChangeListener(new OnFocusChangeListener() {

            @Override
            public void onFocusChange(View view, boolean focused) {
                findViewById(R.id.llmenu).setVisibility(focused?View.VISIBLE:View.GONE);
            }
        });
    }

    public void onNumbers(View v) {
        mEdit.setInputType(InputType.TYPE_CLASS_NUMBER);
    }

    public void onLetters(View v) {
        mEdit.setInputType(InputType.TYPE_CLASS_TEXT);
    }

}
这是活动的xml:
activity\u main.xml

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:orientation="vertical" >

    <ScrollView
        android:id="@+id/scrollview"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"
        android:layout_alignWithParentIfMissing="true"
        android:layout_above="@+id/llmenu" >

        <LinearLayout
            android:layout_width="match_parent"
            android:layout_height="wrap_content" >

            <EditText
                android:id="@+id/input"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:inputType="number" >

                <requestFocus />
            </EditText>
        </LinearLayout>
    </ScrollView>

    <LinearLayout
        android:id="@+id/llmenu"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_alignParentBottom="true"
        android:background="#000000"
        android:padding="0dp" >

        <Button
            android:id="@+id/buttonnumbers"
            android:layout_width="0dp"
            android:onClick="onNumbers"
            android:layout_height="match_parent"
            android:layout_weight="1"
            android:text="Numbers" />

        <Button
            android:id="@+id/buttonletters"
            android:layout_width="0dp"
            android:layout_height="match_parent"
            android:layout_weight="1"
            android:onClick="onLetters"
            android:text="Letters" />
    </LinearLayout>

</RelativeLayout>

以下是我是如何做到这一点的

android:inputType=“text拼音| numberDecimal” android:digits=“/0123456789.abcdefghijklmnopqrstuvxyz”

只允许使用由数字指定的字符


请注意,显示的键盘是拨号器的键盘,而不是典型的键盘。对我来说,它完全在XML中实现了我需要的功能。

在EditText的XML布局中添加以下参数:

android:inputType="number|text"

这将允许用户输入文本和数字,并在xml中包含逻辑,而不是在您的活动或片段中包含代码。

您可以通过编程方式执行此操作:

// Numbers
mEditText.setInputType(InputType.TYPE_CLASS_NUMBER);

// Text
mEditText.setInputType(InputType.TYPE_CLASS_TEXT);
setInputType(int type)将内容的类型设置为常量 为inputType定义


从编程的角度来说,对通常的流程稍加调整就可以了。 首先,必须将editText设置为:

editText.setInputType(InputType.TYPE\类别\编号)

然后你必须听keyevent。 按pound键时,再次将InputType设置为InputType.TYPE\u CLASS\u TEXT。 这对我来说应该是可行的

editText.setOnKeyListener(new View.OnKeyListener() 
{
     @Override
     public boolean onKey(View v, int keyCode, KeyEvent event) {
     // TODO Auto-generated method stub
     Log.d("KeyBoard", "Keyboard Test Key Hit");

        switch (keyCode) 
        {
              KeyEvent.KEYCODE_POUND:

              if(editText.setInputType(InputType.TYPE_CLASS_TEXT);
              {                             
                   editText.setInputType(InputType.TYPE_CLASS_TEXT);
                   return true;
              }
         }
     }
}  

在这种情况下,您不应该使用任何inputType筛选器,只需在EditText属性中添加以下行

android:digits="abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890 "
现在只允许这些字符进入编辑文本。 edittext的完整代码如下所示:

<EditText
 android:id="@+id/etTest"
 android:layout_width="match_parent"
 android:layout_height="wrap_content"
 android:ems="10"
 android:digits="abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890 "
 android:hint="@string/hint">


鉴于当前各种手机的默认Android输入类型,这是不可能的

有许多可能的黑客在某些键盘上工作,但在其他键盘上不工作,例如设置原始输入类型的常用方法,通常包括在答案中:

  • editText.setRawInputType(InputType.TYPE\u CLASS\u NUMBER)

我能找到的最好建议是在XML中使用
textPostLaddress
输入类型:

  • android:inputType=“textpastaladdress”

不幸的是,这还没有达到我们希望它达到的目的,但也许在将来会实现。这样做的唯一好处是编辑框上的元信息将反映您的意图。

正如Saurav所说,最好的方法是使用简单的侦听器在QWERTY键盘和数字键盘之间切换:

input.setInputType(InputType.TYPE_CLASS_TEXT);

input.setOnKeyListener(new View.OnKeyListener() {
    @Override
    public boolean onKey(View v, int keyCode, KeyEvent event) {

        switch (keyCode) {
        case 24: // Volumen UP

             input.setInputType(InputType.TYPE_CLASS_NUMBER);
             break;
         case 25: // Volumen DOWN

             input.setInputType(InputType.TYPE_CLASS_TEXT);
             break;
        }
        return true;
    }
});

我尝试了所有的方法,但并不完美。 所以我有另一个想法。适用于所有键盘

 @Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_reset_password);
    editText.setRawInputType(InputType.TYPE_CLASS_NUMBER);
}
@Override
public void onConfigurationChanged(Configuration newConfig) {
    super.onConfigurationChanged(newConfig);


    // Checks whether a hardware keyboard is available
    if (newConfig.hardKeyboardHidden == Configuration.HARDKEYBOARDHIDDEN_NO) {
        Toast.makeText(this, "keyboard visible", Toast.LENGTH_SHORT).show();
        if (editText.isFocused()) {
            editText.setInputType(InputType.TYPE_CLASS_TEXT);
        }

    } else if (newConfig.hardKeyboardHidden == Configuration.HARDKEYBOARDHIDDEN_YES) {
        Toast.makeText(this, "keyboard hidden", Toast.LENGTH_SHORT).show();
        if (editText.getInputType() == InputType.TYPE_CLASS_TEXT) {
            editText.setInputType(InputType.TYPE_CLASS_NUMBER);
        }
    }
}

以以下方式在xml中定义EditText:

<EditText
    android:id="@+id/etTest"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:ems="10"
    android:hint="@string/hint">

</EditText>
<EditText 
    android:id="@+id/txtOppCodigoCliente"
    android:inputType="textVisiblePassword"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:maxLength="11"
    android:hint="@string/strCodigoCliente"/>

输出:


一行数字和其余字母。

对于我来说,Nexus 7上显示的是数字键盘,但无法显示
<EditText 
    android:id="@+id/txtOppCodigoCliente"
    android:inputType="textVisiblePassword"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:maxLength="11"
    android:hint="@string/strCodigoCliente"/>