web-dev-qa-db-ja.com

Androidのソフトキーボードに数字ボタンのみを表示しますか?

Androidのソフトキーボードでは、Android:inputType="numberDecimal"を使用して、zキーボードの代わりに数字を表示するようにソフトキーボードを設定できます。ただし、トップのみを表示する場合はどうすればよいですか番号行1 2 3 4 5 6 7 8 9 0であり、@ # $ % ...で始まる次の行ではありませんか?

聞いてくれてありがとう!

35
Benny Skogberg

コードに次の行のみを追加する必要があります。

input.setRawInputType(Configuration.KEYBOARD_12KEY);

これはonly数字キーボードを表示します。

40
sergidk
Android:inputType="phone"
Android:digits="1234567890"

オプションです

63
softarn

電話番号パッドは、私が見つけた最も近いものです(EditTextinputType="phone"を設定します)。

10
Justin

受け入れられた答えは私にはうまくいきませんでした(OnePlus 3tおよびSamsung Galaxy S6/S7電話でテスト済み)。

このソリューションはnumberPasswordを使用しますが、EditTextのデフォルトの変換方法をオーバーライドして、ドットを表示する代わりに文字を表示します。

<EditText
    Android:id="@+id/userid"
    Android:inputType="numberPassword"
    Android:maxLength="6"
/>

// Numeric 6 character user id
EditText input = findViewById(R.id.userid);

// Process input and show characters instead of dots
input.setTransformationMethod(SingleLineTransformationMethod.getInstance());
4
PDP

最後に調べたところ、Androidはそのための良いオプションがありませんでした。ソフトキーボードのようなユーザーインターフェースの独自のバージョンを作成する必要がありました。

1
Spike Williams

答えを投稿しました here が、簡単にするために再投稿します:

Seems Androidは、私たちが求めていた機能を追加しました。これは、単純なEditText数値入力に使用するxmlです:

    Android:inputType="numberPassword"
    Android:digits="0123456789"
    Android:singleLine="true"
    Android:ems="4"
    Android:textColor="@Android:color/black"
    Android:gravity="center"
1
TopherC

受け入れられた答えは私にはうまくいきませんでした。他の不要な文字を表示し続けました

InputTypeをnumberPasswordに変更し、パスワードドットを無効にすることで、必要な動作を実現する方法を見つけました。

textInput.inputType = InputType.TYPE_CLASS_NUMBER or InputType.TYPE_NUMBER_VARIATION_PASSWORD
textInput.transformationMethod = SingleLineTransformationMethod()
0
sgc_code

これをXamarinのAndroidで実装しました。したがって、私のコードはC#です。ただし、プリンシパルは同じままです。edittextの属性をAndroid:inputType="numberPassword"に設定できます。

次に、コード内で、カスタム変換メソッドを編集テキストビューに追加します。

holder.edtxtQty.TransformationMethod = new HiddenPasswordTransformationMethod();

private class HiddenPasswordTransformationMethod : global::Android.Text.Method.PasswordTransformationMethod
        {
            public override Java.Lang.ICharSequence GetTransformationFormatted(Java.Lang.ICharSequence source, View view)
            {
                return new PasswordCharSequence(source);
            }
        }

    private class PasswordCharSequence : Java.Lang.Object, Java.Lang.ICharSequence
    {
        private char DOT = '\u2022';

        private Java.Lang.ICharSequence _source;
        public PasswordCharSequence(Java.Lang.ICharSequence source)
        {
            _source = source;
        }

        public char CharAt(int index)
        {
            return _source.CharAt(index);
        }

        public int Length()
        {
            return _source.Length();
        }

        public Java.Lang.ICharSequence SubSequenceFormatted(int start, int end)
        {
            return _source.SubSequenceFormatted(start, end); // Return default
        }

        public IEnumerator<char> GetEnumerator()
        {
            return _source.GetEnumerator();
        }

        System.Collections.IEnumerator System.Collections.IEnumerable.GetEnumerator()
        {
            return _source.GetEnumerator();
        }
    }
0
Altaf Virani