How do we set the input type for an EditText programatically? I'm trying:
mEdit.setInputType(InputType.TYPE_TEXT_VARIATION_PASSWORD);
it doesn't seem to have any effect.
According to the TextView docs, the programmatic version of android:password is setTransformationMethod(), not setInputType(). So something like:
mEdit.setTransformationMethod(PasswordTransformationMethod.getInstance());
should do the trick.
Here are the various Input Types as shown on the standard keyboard.

editText.setInputType(InputType.TYPE_CLASS_TEXT);
Other options besides TYPE_CLASS_TEXT can be found in the documentation.
<EditText
android:inputType="text"
/>
Other options besides text can be found in the documentation.
Here is the code for the image above.
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;
}
}
}
This may be of help to others like me who wanted to toggle between password and free-text mode. I tried using the input methods suggested but it only worked in one direction. I could go from password to text but then I could not revert. For those trying to handle a toggle (eg a show Password check box) use
@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");
}
}
I have to credit this for the solution. Wish I had found that a few hours ago!
My answer is not the direct answer to the question. For most of the cases, either of the above answers should be right. However, none of them helped in my case. That's why I am writing it here to help those who have the same problem.
I have a custom ViewGroup in my project that contains a text for the Title and an EditText. This EditText receives Texts, Numbers, Password, Phone, etc. depends on the case and place is being used. The Caller of the view group supposed to tell what is the input type.
Important: Setting the inputType should be the last set of the EditText (or at least it has to come after setting the Text of the EditText), otherwise, there is no effect.