web-dev-qa-db-ja.com

既定では数字キーパッドを使用するが、アルファベット文字を許可するEditText

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

79
Frank Bozzo

次の方法で、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"

数字の列と残りの文字。

13

より堅牢なソリューションをお勧めします。

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

必要な修正

-入力選択ボタンの表示/非表示の処理の改善

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

enter image description here

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

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>
11
Sherif elKhatib

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

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

そして、onCreate()で以下を呼び出します:

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

EditTextをクリックするたびに、数字と文字!を入力できます。 (数字キーボードが最初に表示されます)

10
Terel

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

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

ユーザーもアルファベット文字に切り替えることができます。

8
Alpay

基本的に、EditText inputtypeは、EditTextで入力タイプを設定に使用されます。

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

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

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

<EditText Android:id="@+id/EditText01"
 Android:layout_height="wrap_content"
 Android:layout_width="fill_parent"
 Android:inputType="number"
 Android:text="1212223"/>
6
Paresh Mayani

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

4
Shaista Naaz

Paresh Mayaniの回答に従うことができます。

アドバイスとして、Android:inputType="textPhonetic"ユーザー選択に基づいたinputTypeテキストおよび数値。

あなたが私のポイントを得ることを願っています。

2
iDroid Explorer

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

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

        }
    });

この場合、タイプはnumberで、Androidは数値キーボードを表示しますが、必要なものを入力できます。また、他のメソッドを必要に応じてオーバーライドできます。

2
dilix

ここに私がそれを達成した方法があります...

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

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

表示されているキーボードは、一般的なキーボードではなく、ダイヤラーのものです。私にとっては、XML内で完全に必要なものを達成しました。

2
slaman

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

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

  • editText.setRawInputType(InputType.TYPE_CLASS_NUMBER)

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

  • 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;
              }
         }
     }
}  
1
Saurav

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

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

これにより、テンキーをデフォルトに設定し、ユーザーがボタンを押すことで変更できます。

1
dabaerju

TextViewのコードで、Android:inputTypeの「テキスト」を削除します。

そのはず、

<EditText
        Android:id="@+id/editText1"
        Android:layout_width="fill_parent"
        Android:layout_height="wrap_content"
        Android:inputType="number" />
0
Ms. B

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

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

設定してみてください---

editText.setRawInputType(Configuration.KEYBOARD_QWERTY);

詳細な説明

0
Swati

Sauravが言うように、最善の方法はQWERTY KeyboardとNumeric Keyboardをシンプルなリスナーで切り替えることです:

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
oskarko

プログラムでこれを行うことができます:

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

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

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

0
jmcdonnell40