Làm cách nào để đặt loại đầu vào cho EditText theo chương trình? Tôi đang cô:
mEdit.setInputType(InputType.TYPE_TEXT_VARIATION_PASSWORD);
nó dường như không có tác dụng gì
Làm cách nào để đặt loại đầu vào cho EditText theo chương trình? Tôi đang cô:
mEdit.setInputType(InputType.TYPE_TEXT_VARIATION_PASSWORD);
nó dường như không có tác dụng gì
Câu trả lời:
Theo các tài liệu TextView , phiên bản lập trình của android: mật khẩu là setTransaturesMethod () , không phải setInputType (). Vì vậy, một cái gì đó như:
mEdit.setTransformationMethod(PasswordTransformationMethod.getInstance());
nên làm thủ thuật.
EditText
(thay thế các ký tự bằng dấu chấm mật khẩu). Điều này không ảnh hưởng gì đến những gì được phép nhập vào EditText
chính nó.
Để đặt loại đầu vào cho EditText theo chương trình, bạn phải chỉ định loại lớp đầu vào là văn bản.
editPass.setInputType(InputType.TYPE_CLASS_TEXT | InputType.TYPE_TEXT_VARIATION_PASSWORD);
Dưới đây là các loại đầu vào khác nhau như được hiển thị trên bàn phím tiêu chuẩn.
editText.setInputType(InputType.TYPE_CLASS_TEXT);
Các tùy chọn khác bên cạnh TYPE_CLASS_TEXT
có thể được tìm thấy trong tài liệu .
<EditText
android:inputType="text"
/>
Các tùy chọn khác bên cạnh text
có thể được tìm thấy trong tài liệu .
Đây là mã cho hình ảnh trên.
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;
}
}
}
tôi đã giải quyết tất cả bằng
.setInputType(InputType.TYPE_CLASS_NUMBER);
để xem dữ liệu rõ ràng và
.setInputType(InputType.TYPE_CLASS_NUMBER | InputType.TYPE_NUMBER_VARIATION_PASSWORD);
để xem các dấu chấm (nếu dữ liệu là một số, đó không phải là sự lựa chọn che lớp khác)
Điều này có thể giúp ích cho những người khác như tôi, những người muốn chuyển đổi giữa mật khẩu và chế độ văn bản tự do. Tôi đã thử sử dụng các phương thức nhập liệu được đề xuất nhưng nó chỉ hoạt động theo một hướng. Tôi có thể chuyển từ mật khẩu sang văn bản nhưng sau đó tôi không thể hoàn nguyên. Đối với những người đang cố gắng xử lý việc chuyển đổi (ví dụ: hộp kiểm hiển thị Mật khẩu), hãy sử dụng
@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");
}
}
Tôi phải ghi nhận điều này cho giải pháp. Ước gì tôi đã tìm thấy điều đó một vài giờ trước!
Hãy thử thêm nó vào thẻ EditText / TextView trong bố cục của bạn
android:password="true"
Chỉnh sửa: Tôi chỉ đọc lại bài viết của bạn, có lẽ bạn cần phải làm điều này sau khi xây dựng. Tôi không thấy lý do tại sao đoạn trích của bạn sẽ không hoạt động.
Tôi biết câu trả lời dự kiến là trong Java
. Nhưng đây là 2 xu lời khuyên của tôi luôn cố gắng xử lý xem nội dung liên quan trong XML
(công cụ cơ bản ít nhất) vì vậy tôi sẽ đề nghị thay vì sử dụng một xml
thuộc tính thay vì xử lý trường hợp sử dụng này trongjava
<EditText
android:inputType="textPassword"/>
Ẩn giấu:
edtPassword.setInputType(InputType.TYPE_CLASS_TEXT);
edtPassword.setTransformationMethod(null);
Chỉ:
edtPassword.setInputType(InputType.TYPE_TEXT_VARIATION_PASSWORD);
edtPassword.setTransformationMethod(PasswordTransformationMethod.getInstance());
password.setInputType(InputType.TYPE_CLASS_TEXT |
InputType.TYPE_TEXT_VARIATION_PASSWORD);
ngoài ra, bạn phải cẩn thận rằng con trỏ di chuyển đến điểm bắt đầu của editText sau khi hàm này được gọi, vì vậy hãy đảm bảo rằng bạn di chuyển con trỏ đến điểm cuối một lần nữa.
field.setInputType(InputType.TYPE_CLASS_TEXT);