EditTextのinputTypeをプログラムで設定しますか?


回答:


213

TextView docsによると、android:passwordのプログラムバージョンはsetInputType()ではなくsetTransformationMethod()です。したがって、次のようなもの:

mEdit.setTransformationMethod(PasswordTransformationMethod.getInstance());

トリックを行う必要があります。


4
これに追加するは、setInputTypeの代わりにsetTransformationMethodを呼び出す必要があります。setTransformationMethodの後にsetInputTypeを呼び出すと、EditTextが再びパスワードモードになりません。
Paul Ryland

11
この答えは、尋ねられている質問に対しては間違っています。これは、に入力されたテキストのみを変換しますEditText(文字をパスワードのドットで置き換えます)。これは、EditTextそれ自体に入力できるものにはまったく影響を与えません。
slinden77 2013年

4
setInputTypeは最終的に内部からsetTransformationMethodを呼び出すため、TYPE_TEXT_VARIATION_PASSWORDをsetInputTypeに渡すと、これが自動的に行われます。この問題は、setInputTypeを呼び出した後にsetSingleLineを呼び出すときに発生し、setTransformationMethodをnullまたは単一行トランスフォーマーで呼び出して、パスワードトランスフォーマーを消去します。
sparkym3 2015年

setTransformationMethod(PasswordTransformationMethod.getInstance())を呼び出した後、編集できない
sujith s

ただし、次にフィールドを使用するときに、パスワードが推奨テキストで表示されます
Gary Davies

408

EditTextの入力タイプをプログラムで設定するには、入力クラスタイプがテキストであることを指定する必要があります。

editPass.setInputType(InputType.TYPE_CLASS_TEXT | InputType.TYPE_TEXT_VARIATION_PASSWORD);

2
あなたのヒントは私にとって完璧に機能しました!プログラムで入力タイプを複数行に設定することで同様の問題が発生しました。
アンナ・ラム

ここにビットごとのOR演算子があることの意味は何ですか?申し訳ありません、私はAndroidを使い始めたばかりです。
sanjeev

InputType.TYPE_TEXT_VARIATION_PASSWORDは機能しませんが、setTransformationMethod(PasswordTransformationMethod.getInstance());に同意しません。します!
Lluis Felisart 2017

37

標準キーボードに表示されるさまざまな入力タイプは次のとおりです。

入力タイプのデモ

プログラムによる入力タイプの設定

editText.setInputType(InputType.TYPE_CLASS_TEXT);

その他のオプションTYPE_CLASS_TEXTドキュメントにあります

XMLでの入力タイプの設定

<EditText
    android:inputType="text"
/>

その他のオプションtextドキュメントにあります

補足コード

上の画像のコードは次のとおりです。

public class MainActivity extends AppCompatActivity {

    EditText editText;
    TextView textView;
    List<InputTypeItem> inputTypes;
    int counter = 0;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        editText = findViewById(R.id.editText);
        textView = findViewById(R.id.textView);
        initArray();
    }

    public void onChangeInputTypeButtonClick(View view) {
        if (counter >= inputTypes.size()) {
            startOver();
            return;
        }
        textView.setText(inputTypes.get(counter).name);
        editText.setInputType(inputTypes.get(counter).value);
        editText.setSelection(editText.getText().length());
        counter++;
    }

    private void startOver() {
        counter = 0;
        textView.setText("");
        editText.setInputType(InputType.TYPE_CLASS_TEXT);
        InputMethodManager imm = (InputMethodManager)getSystemService(Context.INPUT_METHOD_SERVICE);
        imm.hideSoftInputFromWindow(editText.getWindowToken(), 0);
    }


    private void initArray() {
        inputTypes = new ArrayList<>();
        inputTypes.add(new InputTypeItem("date",  InputType.TYPE_CLASS_DATETIME | InputType.TYPE_DATETIME_VARIATION_DATE));
        inputTypes.add(new InputTypeItem("datetime", InputType.TYPE_CLASS_DATETIME | InputType.TYPE_DATETIME_VARIATION_NORMAL));
        inputTypes.add(new InputTypeItem("none", InputType.TYPE_NULL));
        inputTypes.add(new InputTypeItem("number",  InputType.TYPE_CLASS_NUMBER | InputType.TYPE_NUMBER_VARIATION_NORMAL));
        inputTypes.add(new InputTypeItem("numberDecimal",  InputType.TYPE_CLASS_NUMBER | InputType.TYPE_NUMBER_FLAG_DECIMAL));
        inputTypes.add(new InputTypeItem("numberPassword",  InputType.TYPE_CLASS_NUMBER | InputType.TYPE_NUMBER_VARIATION_PASSWORD));
        inputTypes.add(new InputTypeItem("numberSigned", InputType.TYPE_CLASS_NUMBER | InputType.TYPE_NUMBER_FLAG_SIGNED));
        inputTypes.add(new InputTypeItem("phone",  InputType.TYPE_CLASS_PHONE));
        inputTypes.add(new InputTypeItem("text",  InputType.TYPE_CLASS_TEXT | InputType.TYPE_TEXT_VARIATION_NORMAL));
        inputTypes.add(new InputTypeItem("textAutoComplete", InputType.TYPE_TEXT_FLAG_AUTO_COMPLETE));
        inputTypes.add(new InputTypeItem("textAutoCorrect",  InputType.TYPE_TEXT_FLAG_AUTO_CORRECT));
        inputTypes.add(new InputTypeItem("textCapCharacters",  InputType.TYPE_TEXT_FLAG_CAP_CHARACTERS));
        inputTypes.add(new InputTypeItem("textCapSentences",  InputType.TYPE_TEXT_FLAG_CAP_SENTENCES));
        inputTypes.add(new InputTypeItem("textCapWords",  InputType.TYPE_TEXT_FLAG_CAP_WORDS));
        inputTypes.add(new InputTypeItem("textEmailAddress",  InputType.TYPE_CLASS_TEXT | InputType.TYPE_TEXT_VARIATION_EMAIL_ADDRESS));
        inputTypes.add(new InputTypeItem("textEmailSubject", InputType.TYPE_CLASS_TEXT | InputType.TYPE_TEXT_VARIATION_EMAIL_SUBJECT));
        inputTypes.add(new InputTypeItem("textFilter",  InputType.TYPE_CLASS_TEXT | InputType.TYPE_TEXT_VARIATION_FILTER));
        inputTypes.add(new InputTypeItem("textLongMessage",  InputType.TYPE_CLASS_TEXT | InputType.TYPE_TEXT_VARIATION_LONG_MESSAGE));
        inputTypes.add(new InputTypeItem("textMultiLine",  InputType.TYPE_TEXT_FLAG_MULTI_LINE));
        inputTypes.add(new InputTypeItem("textNoSuggestions", InputType.TYPE_TEXT_FLAG_NO_SUGGESTIONS));
        inputTypes.add(new InputTypeItem("textPassword",  InputType.TYPE_CLASS_TEXT | InputType.TYPE_TEXT_VARIATION_PASSWORD));
        inputTypes.add(new InputTypeItem("textPersonName", InputType.TYPE_CLASS_TEXT | InputType.TYPE_TEXT_VARIATION_PERSON_NAME));
        inputTypes.add(new InputTypeItem("textPhonetic",  InputType.TYPE_CLASS_TEXT | InputType.TYPE_TEXT_VARIATION_PHONETIC));
        inputTypes.add(new InputTypeItem("textPostalAddress", InputType.TYPE_CLASS_TEXT | InputType.TYPE_TEXT_VARIATION_POSTAL_ADDRESS));
        inputTypes.add(new InputTypeItem("textShortMessage", InputType.TYPE_CLASS_TEXT | InputType.TYPE_TEXT_VARIATION_SHORT_MESSAGE));
        inputTypes.add(new InputTypeItem("textUri",  InputType.TYPE_CLASS_TEXT | InputType.TYPE_TEXT_VARIATION_URI));
        inputTypes.add(new InputTypeItem("textVisiblePassword",  InputType.TYPE_CLASS_TEXT | InputType.TYPE_TEXT_VARIATION_VISIBLE_PASSWORD));
        inputTypes.add(new InputTypeItem("textWebEditText",  InputType.TYPE_CLASS_TEXT | InputType.TYPE_TEXT_VARIATION_WEB_EDIT_TEXT));
        inputTypes.add(new InputTypeItem("textWebEmailAddress", InputType.TYPE_CLASS_TEXT | InputType.TYPE_TEXT_VARIATION_WEB_EMAIL_ADDRESS));
        inputTypes.add(new InputTypeItem("textWebPassword", InputType.TYPE_CLASS_TEXT | InputType.TYPE_TEXT_VARIATION_WEB_PASSWORD));
        inputTypes.add(new InputTypeItem("time", InputType.TYPE_CLASS_DATETIME | InputType.TYPE_DATETIME_VARIATION_TIME));
    }

    class InputTypeItem {
        private String name;
        private int value;
        InputTypeItem(String name, int value) {
            this.name = name;
            this.value = value;
        }
    }
}

こちらもご覧ください


29

私はすべてで解決しました

.setInputType(InputType.TYPE_CLASS_NUMBER);

明確なデータと

.setInputType(InputType.TYPE_CLASS_NUMBER | InputType.TYPE_NUMBER_VARIATION_PASSWORD);

ドットを見る(データが数値の場合、他のクラスの選択ではありません)


これでうまくいきました!質問1つですが、プレーンテキストからパスワードタイプに変更するときに「or」を追加する必要があるのはなぜですか。なぜこれを行うことができないのですか:.setInputType(InputType.TYPE_NUMBER_VARIATION_PASSWORD);? 試してみましたがうまくいきませんでした。
UnknownUser

15

数字のみを許可するには:

password1.setInputType(InputType.TYPE_CLASS_TEXT | InputType.TYPE_CLASS_NUMBER);

パスワードを変換(非表示)するには:

password1.setTransformationMethod(PasswordTransformationMethod.getInstance());

7
editText.setInputType(EditorInfo.TYPE_CLASS_NUMBER);

//必要に応じてTYPE _...を変更できます。


5

Kotlinの場合:

    val password = EditText(this)
    password.inputType = InputType.TYPE_CLASS_TEXT or InputType.TYPE_TEXT_VARIATION_PASSWORD
    password.hint = "Password"

4

これは、パスワードモードとフリーテキストモードを切り替えたいと思っていた私のような他の人にとって役立つかもしれません。提案された入力方法を使用してみましたが、一方向でしか機能しませんでした。パスワードからテキストに変更できましたが、元に戻すことはできませんでした。トグル(たとえば、パスワードの表示チェックボックス)を処理しようとする人は、

       @Override
        public void onClick(View v)
        {
            if(check.isChecked())
            {
                edit.setTransformationMethod(HideReturnsTransformationMethod.getInstance());
                Log.i(TAG, "Show password");
            }
            else
            {
                edit.setTransformationMethod(PasswordTransformationMethod.getInstance());
                Log.i(TAG, "Hide password");
            }
        }

私はこれを解決のために信用しなければなりません。私が数時間前にそれを見つけたことを願っています!


1

パスワードを再表示するには:

editText.setInputType(
      InputType.TYPE_CLASS_TEXT|
      InputType.TYPE_TEXT_VARIATION_VISIBLE_PASSWORD
);

パスワードを再度非表示にするには:

editText.setTransformationMethod(PasswordTransformationMethod.getInstance());

0

これをレイアウトのEditText / TextViewタグに追加してみてください

android:password="true"

編集:私はあなたの投稿を読み直しました、おそらくあなたは構築後にこれを行う必要があります。スニペットが機能しない理由はわかりません。


この場合、レイアウトファイルはありません。フィールドはプログラムで生成されています。
user246114 2010

うん、それは建設後に行われている、なぜそれがうまくいかないのかわからない!
user246114 2010

6
このオプションは廃止されました!!
swiftBoy

これは古いAndroid 2.3で機能するものの1つにすぎません。私は答えを支持しました。
djdance 2018

0

予想される回答はにありJavaます。しかし、ここに私の2セントのアドバイスは常にビュー関連のものXML(少なくとも基本的なもの)を処理しようとするので、xmlこのユースケースではなく属性を使用することをお勧めしますjava

    <EditText
     android:inputType="textPassword"/>

2
たとえば、フィールドに入力されたパスワードの非表示/表示など、さまざまな入力タイプを切り替えたい場合があります。これが私をこのページ
ウィリアム

1
しかし、そのためにはEditTextにオプションがあり、パスワードを表示/非表示にすることができます。自分で行う必要はありません。また、そのための素晴らしいアニメーションを提供します。
プラタムケサルカール2017

情報をありがとう、私はここでそれを見てきたstackoverflow.com/a/41163578/3310235
William

0

隠す:

edtPassword.setInputType(InputType.TYPE_CLASS_TEXT);
edtPassword.setTransformationMethod(null);

公演:

edtPassword.setInputType(InputType.TYPE_TEXT_VARIATION_PASSWORD);                    
edtPassword.setTransformationMethod(PasswordTransformationMethod.getInstance());

0
password.setInputType(InputType.TYPE_CLASS_TEXT |
InputType.TYPE_TEXT_VARIATION_PASSWORD);

また、この関数を呼び出した後、カーソルがeditTextの開始点に移動するように注意する必要があります。そのため、カーソルを必ず終了点に移動してください。


弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.