프로그래밍 방식으로 EditText의 입력 유형을 어떻게 설정합니까? 노력하고있어:
mEdit.setInputType(InputType.TYPE_TEXT_VARIATION_PASSWORD);
효과가없는 것 같습니다.
프로그래밍 방식으로 EditText의 입력 유형을 어떻게 설정합니까? 노력하고있어:
mEdit.setInputType(InputType.TYPE_TEXT_VARIATION_PASSWORD);
효과가없는 것 같습니다.
답변:
TextView docs 에 따르면 android : password의 프로그래밍 버전은 setInputType ()이 아니라 setTransformationMethod ()입니다. 그래서 같은 :
mEdit.setTransformationMethod(PasswordTransformationMethod.getInstance());
트릭을해야합니다.
EditText
(문자를 암호 점으로 바꿉니다). 이것은 EditText
그 자체 로 입력 될 수있는 것에 영향을 미치지 않습니다 .
프로그래밍 방식으로 EditText의 입력 유형을 설정하려면 입력 클래스 유형이 텍스트임을 지정해야합니다.
editPass.setInputType(InputType.TYPE_CLASS_TEXT | InputType.TYPE_TEXT_VARIATION_PASSWORD);
표준 키보드에 표시된 다양한 입력 유형은 다음과 같습니다.
editText.setInputType(InputType.TYPE_CLASS_TEXT);
그 밖의 다른 옵션 TYPE_CLASS_TEXT
은 설명서 에서 찾을 수 있습니다 .
<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;
}
}
}
나는 모든 것을 해결했다
.setInputType(InputType.TYPE_CLASS_NUMBER);
명확한 데이터를 참조하십시오
.setInputType(InputType.TYPE_CLASS_NUMBER | InputType.TYPE_NUMBER_VARIATION_PASSWORD);
점을 참조하십시오 (데이터가 숫자이면 다른 클래스를 선택하지 않습니다)
이것은 암호와 자유 텍스트 모드 사이를 전환하려는 저 같은 다른 사람들에게 도움이 될 수 있습니다. 제안 된 입력 방법을 사용해 보았지만 한 방향으로 만 작동했습니다. 암호에서 텍스트로 갈 수 있었지만 되돌릴 수 없었습니다. 토글 (예 : 비밀번호 표시 확인란)을 처리하려는 경우
@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");
}
}
나는 이것을 해결책 으로 인정 해야한다. 몇 시간 전에 발견했으면 좋겠다!
이것을 레이아웃의 EditText / TextView 태그에 추가하십시오
android:password="true"
편집 : 난 그냥 당신의 게시물을 다시 읽고 아마도 건설 후이 작업을 수행해야합니다. 스 니펫이 작동하지 않는 이유를 모르겠습니다.
예상 답변이에 있음을 알고 Java
있습니다. 그러나 여기 2 센트의 조언은 항상 XML
( 관련된 기본 항목) 보기 관련 항목을 처리하려고 하므로이 xml
사용 사례를 처리 하는 대신 속성을 사용하는 것이 좋습니다 .java
<EditText
android:inputType="textPassword"/>
field.setInputType(InputType.TYPE_CLASS_TEXT);