ในแอปพลิเคชัน Android ของฉันฉันมีที่แตกต่างกันEditText
ซึ่งผู้ใช้สามารถป้อนข้อมูล แต่ฉันต้องบังคับให้ผู้ใช้เขียนตัวอักษรตัวพิมพ์ใหญ่ คุณรู้ฟังก์ชั่นการทำเช่นนั้นหรือไม่?
ในแอปพลิเคชัน Android ของฉันฉันมีที่แตกต่างกันEditText
ซึ่งผู้ใช้สามารถป้อนข้อมูล แต่ฉันต้องบังคับให้ผู้ใช้เขียนตัวอักษรตัวพิมพ์ใหญ่ คุณรู้ฟังก์ชั่นการทำเช่นนั้นหรือไม่?
คำตอบ:
Android มีInputFilter ในตัวสำหรับสิ่งนี้ !
edittext.setFilters(new InputFilter[] {new InputFilter.AllCaps()});
ระวังsetFilters
จะรีเซ็ตคุณลักษณะอื่น ๆ ทั้งหมดที่ได้รับการตั้งค่าผ่านทาง XML (เช่นmaxLines
, inputType
, imeOptinos
... ) หากต้องการป้องกันไม่ให้เพิ่มตัวกรองลงในรายการที่มีอยู่แล้ว
InputFilter[] editFilters = <EditText>.getFilters();
InputFilter[] newFilters = new InputFilter[editFilters.length + 1];
System.arraycopy(editFilters, 0, newFilters, 0, editFilters.length);
newFilters[editFilters.length] = <YOUR_FILTER>;
<EditText>.setFilters(newFilters);
maxLength
) พยายามที่จะผนวกInputFilter.AllCaps()
การeditText.getFilters
อาร์เรย์ ดูstackoverflow.com/a/18934659/3890983
editText.filters = editText.filters + InputFilter.AllCaps()
editText.filters += InputFilter.AllCaps()
Kotlin ยอดเยี่ยม! <3
หากคุณต้องการที่จะบังคับให้ผู้ใช้ที่จะเขียนในตัวพิมพ์ใหญ่โดยค่าเริ่มต้นใน EditText android:inputType="textCapCharacters"
ของคุณคุณก็ต้องเพิ่ม (ผู้ใช้ยังคงสามารถเปลี่ยนเป็นตัวพิมพ์เล็กได้ด้วยตนเอง)
ตั้งค่าการinput type
ควรให้เกียรติว่าTYPE_CLASS_TEXT| TYPE_TEXT_FLAG_CAP_CHARACTERS
keyboard
คุณสามารถใช้สองทาง
วิธีแรก:
ตั้งค่าandroid:inputType="textCapSentences"
บน EditText ของคุณ
วิธีที่สอง:
เมื่อผู้ใช้ป้อนหมายเลขคุณจะต้องใช้โปรแกรมดูข้อความและเปลี่ยนอักษรตัวพิมพ์เล็กเป็นตัวพิมพ์ใหญ่
edittext.addTextChangedListener(new TextWatcher() {
@Override
public void onTextChanged(CharSequence arg0, int arg1, int arg2, int arg3) {
}
@Override
public void beforeTextChanged(CharSequence arg0, int arg1, int arg2,
int arg3) {
}
@Override
public void afterTextChanged(Editable et) {
String s=et.toString();
if(!s.equals(s.toUpperCase()))
{
s=s.toUpperCase();
edittext.setText(s);
edittext.setSelection(edittext.length()); //fix reverse texting
}
}
});
คุณสามารถเพิ่มandroid:textAllCaps="true"
คุณสมบัติให้กับไฟล์ xml ของคุณใน EditText วิธีนี้จะบังคับใช้แป้นพิมพ์ softinput เพื่อให้ปรากฏในโหมดตัวพิมพ์ใหญ่ทั้งหมด ค่าที่คุณป้อนจะปรากฏในตัวพิมพ์ใหญ่ อย่างไรก็ตามสิ่งนี้จะไม่รับประกันว่าผู้ใช้สามารถป้อนUpperCase
ตัวอักษรได้เท่านั้น หากพวกเขาต้องการพวกเขายังสามารถถอยกลับไปที่ตัวอักษรตัวพิมพ์เล็ก หากคุณต้องการให้แน่ใจว่าผลลัพธ์ของEdittext
อยู่ในตัวพิมพ์ใหญ่ทั้งหมดแล้วคุณจะต้องแปลงสตริงการป้อนข้อมูลด้วยตนเองโดยใช้toUpperCase()
วิธีการString
เรียน
android:textAllCaps="true"
เป็นเพียงคุณสมบัติของ TextView ( stackoverflow.com/a/28803492/5268730 ) ใช้android:inputType="textCapCharacters"
แทน
คุณควรใส่android:inputType="textCapCharacters"
Edittext ในไฟล์ xml
แทนที่จะกังวลเกี่ยวกับการจัดการกับคีย์บอร์ดทำไมไม่เพียงแค่รับอินพุตตัวพิมพ์เล็กหรือตัวพิมพ์ใหญ่แล้วแปลงสตริงเป็นตัวพิมพ์ใหญ่?
รหัสต่อไปนี้ควรช่วย:
EditText edit = (EditText)findViewById(R.id.myEditText);
String input;
....
input = edit.getText();
input = input.toUpperCase(); //converts the string to uppercase
นี่เป็นมิตรกับผู้ใช้เนื่องจากผู้ใช้ไม่จำเป็นต้องรู้ว่าคุณต้องการสตริงเป็นตัวพิมพ์ใหญ่ หวังว่านี่จะช่วยได้
ดียิ่งกว่า ... ซับในKotlin ...
// gets your previous attributes in XML, plus adds AllCaps filter
<your_edit_text>.setFilters(<your_edit_text>.getFilters() + InputFilter.AllCaps())
ทำ!
<your_edit_text>.filters = <your_edit_text>.filters + InputFilter.AllCaps()
<your_edit_text>.filters += InputFilter.AllCaps()
ในkotlinในไฟล์. kt ทำการเปลี่ยนแปลง:
edit_text.filters = edit_text.filters + InputFilter.AllCaps()
ใช้คุณสมบัติสังเคราะห์สำหรับการเข้าถึงวิดเจ็ตที่มี ID โดยตรง และใน XML สำหรับข้อความแก้ไขของคุณให้เพิ่มแฟล็กอีกสองสามรายการเป็น:
<EditText
android:id="@+id/edit_text_qr_code"
android:layout_width="match_parent"
android:layout_height="wrap_content"
...other attributes...
android:textAllCaps="true"
android:inputType="textCapCharacters"
/>
การดำเนินการนี้จะอัปเดตคีย์บอร์ดเมื่อเปิดใช้งานตัวพิมพ์ใหญ่
ใช้ตัวกรองอินพุต
editText = (EditText) findViewById(R.id.enteredText);
editText.setFilters(new InputFilter[]{new InputFilter.AllCaps()});
edittext.addTextChangedListener(new TextWatcher() {
@Override
public void onTextChanged(CharSequence arg0, int arg1, int arg2, int arg3) {
}
@Override
public void beforeTextChanged(CharSequence arg0, int arg1, int arg2,
int arg3) {
}
@Override
public void afterTextChanged(Editable et) {
String s=et.toString();
if(!s.equals(s.toUpperCase()))
{
s=s.toUpperCase();
edittext.setText(s);
}
editText.setSelection(editText.getText().length());
}
});
แค่ทำสิ่งนี้:
// ****** Every first letter capital in word *********
<EditText
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:inputType="textCapWords"
/>
//***** if all letters are capital ************
android:inputType="textCapCharacters"
ลองใช้รหัสด้านล่างใด ๆ อาจช่วยแก้ปัญหาของคุณได้
programatically:
editText.filters = editText.filters + InputFilter.AllCaps()
XML:
android:inputType="textCapCharacters" with Edittext
สำหรับฉันมันทำงานโดยการเพิ่มAndroid: textAllCaps = "true"และandroid: inputType = "textCapCharacters"
<android.support.design.widget.TextInputEditText
android:layout_width="fill_parent"
android:layout_height="@dimen/edit_text_height"
android:textAllCaps="true"
android:inputType="textCapCharacters"
/>
ในการรับทุนทั้งหมดให้ใช้สิ่งต่อไปนี้ใน XML ของคุณ:
<EditText
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:textAllCaps="true"
android:inputType="textCapCharacters"
/>
ลองใช้รหัสนี้มันจะทำให้การป้อนข้อมูลของคุณเป็นตัวพิมพ์ใหญ่
edittext.setFilters(new InputFilter[] {new InputFilter.AllCaps()});
ขึ้นอยู่กับคำตอบที่ยอมรับคำตอบนี้ไม่เหมือนกัน แต่ใน Kotlin เพียงเพื่อความสะดวกในการคัดลอก: ·)
private fun EditText.autocapitalize() {
val allCapsFilter = InputFilter.AllCaps()
setFilters(getFilters() + allCapsFilter)
}
filters += InputFilter.AllCaps()
: D
หากต้องการรับแป้นพิมพ์ใหญ่เมื่อคลิกedittext ให้ใช้รหัสนี้ใน xml ของคุณ
<EditText
android:id="@+id/et"
android:layout_width="250dp"
android:layout_height="wrap_content"
android:hint="Input your country"
android:padding="10dp"
android:inputType="textCapCharacters"
/>
ฉันใช้ Visual Studio 2015 / Xamarin เพื่อสร้างแอปของฉันสำหรับทั้ง Android 5.1 และ Android 6.0 (apk เดียวกันที่ติดตั้งบนทั้งสอง)
เมื่อฉันระบุ android:inputType="textCapCharacters"
ใน axml ของฉันแป้นพิมพ์ AllCaps จะปรากฏตามที่คาดหวังใน Android 6.0 แต่ไม่ใช่ Android 5.1 ฉันเพิ่มลงandroid:textAllCaps="true"
ใน axml ของฉันและยังไม่มีแป้นพิมพ์ AllCaps ใน Android 5.1 ฉันตั้งค่าตัวกรองโดยใช้EditText.SetFilters(new IInputFilter[] { new InputFilterAllCaps() });
และในขณะที่แป้นพิมพ์อ่อนจะแสดงอักขระตัวพิมพ์เล็กใน Android 5.1 ช่องป้อนข้อมูลคือ AllCaps ในขณะนี้
แก้ไข:ความแตกต่างด้านพฤติกรรมที่ฉันสังเกตและสันนิษฐานว่าเกี่ยวข้องกับระบบปฏิบัติการจริง ๆ แล้วเพราะฉันมี Google Keyboard รุ่นต่างๆบนอุปกรณ์ทดสอบ เมื่อฉันอัปเดตอุปกรณ์เป็น Google Keyboard ล่าสุด (เผยแพร่เมื่อเดือนกรกฎาคม 2559 ตามที่เขียนไว้) พฤติกรรม 'All Caps' นั้นสอดคล้องกันในทุกระบบปฏิบัติการ ตอนนี้อุปกรณ์ทั้งหมดแสดงอักขระตัวพิมพ์เล็กบนคีย์บอร์ด แต่อินพุตคือ All Caps เนื่องจากSetFilters(new IInputFilter[] { new InputFilterAllCaps() });
Xamarin เทียบเท่าคำตอบของ ErlVolton:
editText.SetFilters(editText.GetFilters().Append(new InputFilterAllCaps()).ToArray());
สำนึก kotlin ง่าย
fun EditText.onlyUppercase() {
inputType = InputType.TYPE_CLASS_TEXT or InputType.TYPE_TEXT_FLAG_CAP_CHARACTERS
filters = arrayOf(InputFilter.AllCaps())
}
PS สำหรับฉันfilters
ว่างเปล่าเสมอในตอนแรก
Java 1-liner ของโซลูชันที่เสนออาจเป็น:
editText.setFilters(Lists.asList(new InputFilter.AllCaps(), editText.getFilters())
.toArray(new InputFilter[editText.getFilters().length + 1]));
com.google.common.collect.Lists
หมายเหตุจะต้อง
เพียงแค่เพิ่มรหัสด้านล่างลงใน EditText ของไฟล์ xml ของคุณ
android:digits="ABCDEFGHIJKLMNOPQRSTUVWXYZ"
และหากคุณต้องการอนุญาตให้ทั้งข้อความตัวพิมพ์ใหญ่และตัวเลขใช้รหัสด้านล่าง
android:digits="ABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890"
edittext.setFilters(new InputFilter[] {new InputFilter.AllCaps()});
แม้ว่า