เราจะตั้งค่าประเภทอินพุตสำหรับ EditText แบบเป็นโปรแกรมได้อย่างไร? ฉันกำลังพยายาม:
mEdit.setInputType(InputType.TYPE_TEXT_VARIATION_PASSWORD);
ดูเหมือนว่าจะไม่มีผลใด ๆ
เราจะตั้งค่าประเภทอินพุตสำหรับ EditText แบบเป็นโปรแกรมได้อย่างไร? ฉันกำลังพยายาม:
mEdit.setInputType(InputType.TYPE_TEXT_VARIATION_PASSWORD);
ดูเหมือนว่าจะไม่มีผลใด ๆ
คำตอบ:
ตามTextView docsเวอร์ชัน Android ของโปรแกรม: รหัสผ่านคือsetTransformationMethod ()ไม่ใช่ setInputType () ดังนั้นสิ่งที่ชอบ:
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);
เพื่อดูจุด (ถ้าข้อมูลเป็นตัวเลขมันไม่ใช่ทางเลือกของคลาสอื่น)
วิธีอนุญาตเฉพาะตัวเลข:
password1.setInputType(InputType.TYPE_CLASS_TEXT | InputType.TYPE_CLASS_NUMBER);
วิธีแปลง (ซ่อน) รหัสผ่าน:
password1.setTransformationMethod(PasswordTransformationMethod.getInstance());
editText.setInputType(EditorInfo.TYPE_CLASS_NUMBER);
// คุณสามารถเปลี่ยน TYPE _... ตามความต้องการของคุณ
สำหรับ Kotlin:
val password = EditText(this)
password.inputType = InputType.TYPE_CLASS_TEXT or InputType.TYPE_TEXT_VARIATION_PASSWORD
password.hint = "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.setInputType(
InputType.TYPE_CLASS_TEXT|
InputType.TYPE_TEXT_VARIATION_VISIBLE_PASSWORD
);
ในการซ่อนรหัสผ่านอีกครั้ง:
editText.setTransformationMethod(PasswordTransformationMethod.getInstance());
ลองเพิ่มสิ่งนี้ลงในแท็ก EditText / TextView ในเลย์เอาต์ของคุณ
android:password="true"
แก้ไข: ฉันเพิ่งอ่านโพสต์ของคุณใหม่บางทีคุณอาจต้องทำสิ่งนี้หลังจากการก่อสร้าง ฉันไม่เห็นว่าทำไมข้อมูลโค้ดของคุณไม่ทำงาน
ฉันรู้ว่าคำตอบที่คาดหวังคือJava
อะไร แต่นี่คือคำแนะนำ 2 เซนต์ของฉันพยายามที่จะจัดการกับสิ่งต่าง ๆ ที่เกี่ยวข้องในมุมมองXML
(อย่างน้อยสิ่งพื้นฐาน) ดังนั้นฉันขอแนะนำให้ใช้xml
แอตทริบิวต์แทนการจัดการกับกรณีการใช้นี้java
<EditText
android:inputType="textPassword"/>
ซ่อน:
edtPassword.setInputType(InputType.TYPE_CLASS_TEXT);
edtPassword.setTransformationMethod(null);
แสดง:
edtPassword.setInputType(InputType.TYPE_TEXT_VARIATION_PASSWORD);
edtPassword.setTransformationMethod(PasswordTransformationMethod.getInstance());
password.setInputType(InputType.TYPE_CLASS_TEXT |
InputType.TYPE_TEXT_VARIATION_PASSWORD);
นอกจากนี้คุณต้องระวังด้วยว่าเคอร์เซอร์จะย้ายไปที่จุดเริ่มต้นของ editText หลังจากฟังก์ชั่นนี้ถูกเรียกใช้ดังนั้นตรวจสอบให้แน่ใจว่าคุณเลื่อนเคอร์เซอร์ไปที่จุดสิ้นสุดอีกครั้ง
field.setInputType(InputType.TYPE_CLASS_TEXT);