デフォルトで数字キーパッドを備えたEditTextですが、アルファベット文字を使用できます


82

EditTextボックスがあり、ほとんどの場合ユーザーが数字を入力するため、選択したときに表示されるデフォルトのキーボードをテンキーにします。ただし、必要に応じて、ユーザーがアルファベットも入力できるようにしたいと思います。を使用android:inputType="number"すると、入力が数字のみに制限されます。どのようなオプションがありますか?


2
こんにちは、解決策はありますか?はいの場合は、それを共有してください。同じものを実装する必要があります
Bansal_Sneha 2014年

ユーザーが数字のみで開始し、1桁を超えると、英数字の入力を許可できるようにしますか?
dhuma1981 2015


重複の可能性があります。この同様の投稿で
hrk_er 2015年

回答:


16

次のように、xmlで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"/>

出力: android:inputType = "textVisiblePassword"

数字の行と残りの文字。


3
これが選ばれるべき答えです!
Tash Pemhiwa 2017年

キーボードによって異なります。私の場合、Googleキーボードとヌガーの最新バージョンでは動作しません。
fireb86 2017年

問題を修正しましたか
Ashwin S Ashok 2017

this._editText.setInputType(InputType.TYPE_TEXT_VARIATION_VISIBLE_PASSWORD); this._editText.setTypeface(Typeface.DEFAULT); 私のために働く
xevser 2018

@ fireb86最新バージョンのGboardで動作します。そして、それはオレオで完全にうまく機能しています。
ティムジョン

11

より堅牢なソリューションを提案します:

入力タイプを選択する機能をユーザーに提示します。

必要な修正

-入力選択ボタンの表示/非表示の処理が改善されました

-入力タイプが文字の場合、おそらく提案を削除します

ここに画像の説明を入力してください

アクティビティは次のとおりです。

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_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>

numberがinputTypesの1つで、キーボードがフルスクリーンモード(横向き)の場合、文字は非表示になります。TEXT inputTypeに戻すと、再び表示されます。
OneWorld 2015年

10

これがあなたが探しているものです:

次のようEditTextにxmlでを定義します。

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

</EditText>

そして、あなたの次の電話をかけてくださいonCreate()

etTest = (EditText) findViewById(R.id.etTest);
etTest.setRawInputType(InputType.TYPE_CLASS_NUMBER);
// Note the "Raw"

あなたがあなたのEditText今をクリックするときはいつでも、あなたは数字と文字を入力することができます!(数字キーボードが最初に表示されます)


3
Nexus 7の私にとっては、テンキーが表示されていましたが、通常のキーボードを表示する方法がありませんでした。
ロブ

有望に見えましたが、数字がinputTypesの1つであり、キーボードがフルスクリーンモード(横向き)の場合、文字は非表示になります。
OneWorld 2015年

8

EditTextに設定できるinputTypeは1つだけなので、残念ながらこれは不可能です。以下は、ボタンにアルファベット文字を表示するだけです。

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

ただし、私が提案できるのは、入力タイプを数値に設定し、フォームのテンキーの近くに小さなswitchKeyboardボタンを追加することです。そして、そのonClickを設定します

editText1.setInputType(InputType.TYPE_TEXT_FLAG_NO_SUGGESTIONS);

ユーザーもアルファベットに切り替えることができるように。


その理由はドキュメントにあります。定数名をよく見てください。1つのクラスと1つのバリエーションおよび1つのフラグのみを組み合わせることができます。のようにTYPE_CLASS_NUMBER | TYPE_NUMBER_FLAG_SIGNEDしかし、あなたは次のようなクラスを混在させることはできないんnumbertext
OneWorldの

ドキュメントには、クラスを混在させることはできないとは記載されていません。それについて不平を言う糸くずチェックはありません。また、組み合わせたときに特定のキーボードもありますnumber|text(上記を参照)。これは、長押しで文字を入力できることを意味しますが、実際には機能しません。私にはかなりバグがあるように見えるか、少なくとも不完全に見えます。
masc3d 2017年

@ masc3d-合意されたドキュメントはそれがどこにあるべきかを述べていません。InputTypeの下の説明で言及されていますTYPE_MASK_CLASS:与えられているテキストの全体的なクラスを決定するビットのマスク。サポートされているクラスは、TYPE_CLASS_TEXT、TYPE_CLASS_NUMBER、TYPE_CLASS_PHONE、TYPE_CLASS_DATETIMEです。IME作成者:クラスが理解できるものでない場合は、バリエーションやフラグのないTYPE_CLASS_TEXTを想定してください。」
ToolmakerSteve19年

6

基本的に、EditText inputtypeは、EditTextの入力タイプ設定するために使用されます。

可能な値は次のandroid:inputtypeとおりです。

  • テキスト
  • textCapCharacters
  • textCapWords
  • textCapSentences
  • textAutoCorrect
  • textAutoComplete
  • textMultiLine
  • textImeMultiLine
  • textNoSuggestions
  • textUri
  • textEmailAddress
  • textEmailSubject
  • textShortMessage
  • textLongMessage
  • textPersonName
  • textPostalAddress
  • textPassword
  • textVisiblePassword
  • textWebEditText
  • textFilter
  • textPhonetic
  • numberSigned
  • numberDecimal
  • 電話
  • 日付時刻
  • 日付
  • 時間

次に、例に示すように任意の値を使用できます。

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

3
ありがとう!Google Androidのドキュメントも見つかりませんでした。これらすべてがリストされています!
gimmegimme 2017

4

Asusタブレットにはその機能があり、デフォルトのキーボードをカスタマイズしています。また、キーボードには数字とアルファベットのみが含まれています。要件ソリューションは、デフォルトのキーボードをカスタマイズすることでもあると思います


2

あなたはパレシュマヤニの答えに従うことができます。

そしてアドバイスであなたは使うことができます android:inputType="textPhonetic"、ユーザーの選択に基づいてinputTypeTextとNumberに使用できます。

あなたが私の主張を理解することを願っています。


2

OnCreate in Activityで、これを行います。

    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) {

        }
    });

この場合、「is」numberと入力すると、Androidに数字キーボードが表示されますが、好きなように入力できます。また、必要に応じて他のメソッドをオーバーライドできます。


キーボードがフルスクリーンモードのときに、横向きで試してみましたか?
OneWorld 2015年

2

これが私がそれを達成した方法です...

android:inputType = "textPhonetic | numberDecimal" android:digits = "/ 0123456789.abcdefghijklmnopqrstuvwxyz"

数字で指定された文字のみが許可されます。

表示されているキーボードはダイヤラのキーボードであり、通常のキーボードではないことに注意してください。私にとっては、完全にXML内で必要なことを達成しました。


1
入力クラスを混在させないでください。それらは常に数になります。stackoverflow.com/questions/3544214/…を
OneWorld 2015年

おかげでスラム、私は整数と「-」/マイナス演算子のみを使用する必要がありました
gimmegimme 2017

2

この場合、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">


1
完璧な解決策!ありがとうございました !
BSQ 2017年

1

次のいずれかのトグルボタンを使用しないのはなぜですか。

  • 数値のみを許可するように入力タイプを設定します
  • QWERTYキーボードを使用できるように入力タイプを設定します
  • または、他の入力タイプを設定します(必要な場合)

そうすれば、テンキーをデフォルトに設定でき、ユーザーはボタンを押すことでテンキーを変更できます。


1

これは不可能ですさまざまな電話での現在のデフォルトのAndroid入力タイプを考えるです。

回答に一般的に含まれている生の入力タイプを設定する一般的な方法のように、一部のキーボードでは機能するが他のキーボードでは機能しない可能性のあるハックが多数あります。

  • editText.setRawInputType(InputType.TYPE_CLASS_NUMBER)

私が見つけることができる最善のアドバイスtextPostalAddressは、XMLで入力タイプを使用することです。

  • android:inputType="textPostalAddress"

残念ながら、これは私たちが望んでいることをまだ実行していません、将来的には実行される可能性があります。これの唯一の利点は、編集ボックスのメタ情報が意図したものを反映することです。


1

プログラム的には、通常のフローを少し調整するだけで可能です。まず、editTextを次のように設定する必要があります。

editText.setInputType(InputType.TYPE_CLASS_NUMBER);

次に、キーイベントをリッスンする必要があります。ポンドを押したら、InputTypeを再びInputType.TYPE_CLASS_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;
              }
         }
     }
}  


0

textViewのコードで、android:inputTypeの「text」を削除します。

そのはず、

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

これは彼の問題を解決していません。彼は数字キーボードで文字と数字を許可したいと考えています
OneWorld 2015年

0

これはプログラムで行うことができます。

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

// Text
mEditText.setInputType(InputType.TYPE_CLASS_TEXT);

setInputType(int type)inputTypeに定義されている定数を使用して、コンテンツのタイプを設定します。


0

Sauravが言うように、最良の方法は、単純なリスナーを使用してQWERTYキーボードとNumericKeyboradを切り替えることです。

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;
    }
});

0

私はすべての方法を試しますが、完璧ではありません。だから私は別の考えを持っています。すべてのキーボードに最適です。

 @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);
        }
    }
}

-2

EditTextのxmlレイアウトで、次のパラメーターを追加します。

android:inputType="number|text"

これにより、ユーザーはテキストと数値の両方を入力でき、アクティビティやフラグメントにコードを含めるのではなく、xmlにロジックを含めることができます。


3
入力クラスを混在させないでください。それらは常に数になります。stackoverflow.com/questions/3544214/…を
OneWorld 2015年
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.