Bagaimana cara menetapkan tipe input untuk EditText secara terprogram? Saya mencoba:
mEdit.setInputType(InputType.TYPE_TEXT_VARIATION_PASSWORD);
tampaknya tidak memiliki efek apa pun.
Bagaimana cara menetapkan tipe input untuk EditText secara terprogram? Saya mencoba:
mEdit.setInputType(InputType.TYPE_TEXT_VARIATION_PASSWORD);
tampaknya tidak memiliki efek apa pun.
Jawaban:
Menurut dokumen TextView , versi program android: kata sandi adalah setTransformationMethod () , bukan setInputType (). Jadi sesuatu seperti:
mEdit.setTransformationMethod(PasswordTransformationMethod.getInstance());
harus melakukan trik.
EditText
(menggantikan karakter dengan titik kata sandi). Ini tidak berpengaruh apa pun pada apa yang diizinkan untuk dimasukkan dalam EditText
dirinya sendiri.
Untuk mengatur tipe input untuk EditText secara terprogram, Anda harus menentukan bahwa tipe kelas input adalah teks.
editPass.setInputType(InputType.TYPE_CLASS_TEXT | InputType.TYPE_TEXT_VARIATION_PASSWORD);
Berikut adalah berbagai Jenis Input seperti yang ditunjukkan pada keyboard standar.
editText.setInputType(InputType.TYPE_CLASS_TEXT);
Pilihan lain selain TYPE_CLASS_TEXT
dapat ditemukan dalam dokumentasi .
<EditText
android:inputType="text"
/>
Pilihan lain selain text
dapat ditemukan dalam dokumentasi .
Berikut adalah kode untuk gambar di atas.
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;
}
}
}
saya sudah menyelesaikan semua dengan
.setInputType(InputType.TYPE_CLASS_NUMBER);
untuk melihat data yang jelas dan
.setInputType(InputType.TYPE_CLASS_NUMBER | InputType.TYPE_NUMBER_VARIATION_PASSWORD);
untuk melihat titik-titik (jika data adalah angka, itu bukan pilihan dari kelas lain)
Ini dapat membantu orang lain seperti saya yang ingin beralih antara kata sandi dan mode teks bebas. Saya mencoba menggunakan metode input yang disarankan tetapi hanya bekerja dalam satu arah. Saya dapat beralih dari kata sandi ke teks tetapi kemudian saya tidak dapat kembali. Bagi mereka yang mencoba menangani toggle (mis. Kotak centang Sandi kata sandi) gunakan
@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");
}
}
Saya harus menghargai ini untuk solusinya. Seandainya saya menemukan itu beberapa jam yang lalu!
Coba tambahkan ini ke tag EditText / TextView di tata letak Anda
android:password="true"
Sunting: Saya baru saja membaca kembali posting Anda, mungkin Anda perlu melakukan ini setelah konstruksi. Saya tidak mengerti mengapa cuplikan Anda tidak berfungsi.
Saya tahu Jawaban yang diharapkan ada di Java
. Tapi, inilah 2 sen saran saya yang selalu mencoba menangani hal-hal terkait tampilan di XML
(setidaknya hal-hal dasar) jadi saya sarankan daripada menggunakan xml
atribut daripada menangani kasus penggunaan ini dijava
<EditText
android:inputType="textPassword"/>
Menyembunyikan:
edtPassword.setInputType(InputType.TYPE_CLASS_TEXT);
edtPassword.setTransformationMethod(null);
Menunjukkan:
edtPassword.setInputType(InputType.TYPE_TEXT_VARIATION_PASSWORD);
edtPassword.setTransformationMethod(PasswordTransformationMethod.getInstance());
password.setInputType(InputType.TYPE_CLASS_TEXT |
InputType.TYPE_TEXT_VARIATION_PASSWORD);
Anda juga harus berhati-hati agar kursor bergerak ke titik awal dari editTeks setelah fungsi ini dipanggil, jadi pastikan Anda memindahkan kursor ke titik akhir lagi.
field.setInputType(InputType.TYPE_CLASS_TEXT);