ไม่มีใครรู้วิธีปิดใช้งานเคอร์เซอร์กะพริบในEditText
มุมมองหรือไม่
ไม่มีใครรู้วิธีปิดใช้งานเคอร์เซอร์กะพริบในEditText
มุมมองหรือไม่
คำตอบ:
คุณสามารถใช้แอตทริบิวต์ XML หรือฟังก์ชั่นจาวาandroid:cursorVisible="false"
setCursorVisible(false)
โซลูชั่นที่สมบูรณ์แบบที่ไปไกลกว่าเป้าหมาย
เป้าหมาย: ปิดใช้งานเคอร์เซอร์กะพริบเมื่อEditText
ไม่ได้อยู่ในโฟกัสและเปิดใช้งานเคอร์เซอร์กะพริบเมื่อEditText
อยู่ในโฟกัส ด้านล่างนี้จะเปิดแป้นพิมพ์เมื่อEditText
มีการคลิกและซ่อนไว้เมื่อคุณกดในแป้นพิมพ์
1) ตั้งค่า xml ของคุณภายใต้EditText
:
android:cursorVisible="false"
2) ตั้ง onClickListener:
iEditText.setOnClickListener(editTextClickListener);
OnClickListener editTextClickListener = new OnClickListener()
{
public void onClick(View v)
{
if (v.getId() == iEditText.getId())
{
iEditText.setCursorVisible(true);
}
}
};
3) จากนั้นonCreate
จับภาพเหตุการณ์เมื่อเสร็จแล้วกดใช้OnEditorActionListener
ของคุณแล้วEditText
setCursorVisible(false)
//onCreate...
iEditText.setOnEditorActionListener(new OnEditorActionListener() {
@Override
public boolean onEditorAction(TextView v, int actionId,
KeyEvent event) {
iEditText.setCursorVisible(false);
if (event != null&& (event.getKeyCode() == KeyEvent.KEYCODE_ENTER)) {
InputMethodManager in = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
in.hideSoftInputFromWindow(iEditText.getApplicationWindowToken(),InputMethodManager.HIDE_NOT_ALWAYS);
}
return false;
}
});
คุณสามารถใช้รหัสต่อไปนี้เพื่อเปิดใช้งานและปิดการใช้งานเคอร์เซอร์ข้อความแก้ไขโดยทางโปรแกรม
เพื่อเปิดใช้เคอร์เซอร์
editText.requestFocus();
editText.setCursorVisible(true);
เพื่อปิดการใช้เคอร์เซอร์
editText.setCursorVisible(false);
การใช้ XML เปิดใช้งานเคอร์เซอร์ปิดการใช้งาน
android:cursorVisible="false/true"
android:focusable="false/true"
หากต้องการทำให้ edit_text สามารถเลือกได้ (คัดลอก / ตัด / วาง / เลือก / เลือกทั้งหมด)
editText.setTextIsSelectable(true);
หากต้องการโฟกัสที่โหมดสัมผัสให้เขียนบรรทัดต่อไปนี้ใน XML
android:focusableInTouchMode="true"
android:clickable="true"
android:focusable="true"
โปรแกรม
editText.requestFocusFromTouch();
เพื่อล้างโฟกัสในโหมดสัมผัส
editText.clearFocus()
ปัญหาเกี่ยวกับการตั้งค่าการเปิดเผยเคอร์เซอร์เป็นจริงและเท็จอาจเป็นปัญหาเนื่องจากจะลบเคอร์เซอร์จนกว่าคุณจะตั้งค่าอีกครั้งและในเวลาเดียวกันสามารถแก้ไขได้ซึ่งไม่ใช่ประสบการณ์การใช้งานที่ดี
ดังนั้นแทนที่จะใช้
setCursorVisible(false)
แค่ทำแบบนี้
editText2.setFocusableInTouchMode(false)
editText2.clearFocus()
editText2.setFocusableInTouchMode(true)
รหัสด้านบนจะเป็นการลบโฟกัสที่จะลบเคอร์เซอร์ และเปิดใช้งานอีกครั้งเพื่อให้คุณสามารถสัมผัสได้อีกครั้งและสามารถแก้ไขได้ เช่นเดียวกับประสบการณ์การใช้งานปกติ
ในกรณีของฉันฉันต้องการเปิดใช้งาน / ปิดใช้งานเคอร์เซอร์เมื่อเน้นการแก้ไข
ในกิจกรรมของคุณ:
@Override
public boolean dispatchTouchEvent(MotionEvent ev) {
if (ev.getAction() == MotionEvent.ACTION_DOWN) {
View v = getCurrentFocus();
if (v instanceof EditText) {
EditText edit = ((EditText) v);
Rect outR = new Rect();
edit.getGlobalVisibleRect(outR);
Boolean isKeyboardOpen = !outR.contains((int)ev.getRawX(), (int)ev.getRawY());
System.out.print("Is Keyboard? " + isKeyboardOpen);
if (isKeyboardOpen) {
System.out.print("Entro al IF");
edit.clearFocus();
InputMethodManager imm = (InputMethodManager) this.getSystemService(Context.INPUT_METHOD_SERVICE);
imm.hideSoftInputFromWindow(edit.getWindowToken(), 0);
}
edit.setCursorVisible(!isKeyboardOpen);
}
}
return super.dispatchTouchEvent(ev);
}
edit.setCursorVisible(!isKeyboardOpen);
ที่จะเป็นedit.setCursorVisible(isKeyboardOpen);
เพื่อให้เคอร์เซอร์อยู่มองเห็นได้เมื่อแป้นพิมพ์เป็นปัจจุบัน
ง่ายเพิ่มบรรทัดนี้ลงในเค้าโครงแม่ของคุณ
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
android:focusable="true"
android:focusableInTouchMode="true">
<EditText
android:inputType="text"
android:layout_width="wrap_content"
android:layout_height="wrap_content" />
</LinearLayout>
หากคุณต้องการที่จะละเว้นEdittext
จากการเริ่มต้นของกิจกรรมandroid:focusable
และandroid:focusableInTouchMode
จะช่วยคุณ inshallah
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/linearLayout7" android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:focusable="true" android:focusableInTouchMode="true">
นี้กับของคุณ
LinearLayout
Edittext
เปลี่ยนโฟกัสเป็นมุมมองอื่น (เช่น: textview หรือ Linearlayout ใน XML) โดยใช้
android:focusableInTouchMode="true"
android:focusable="true"
ตั้ง addTextChangedListener เป็น edittext ในกิจกรรม
และหลังจากนั้นเปลี่ยนของ Edittext ใส่edittext.clearFocus()
;
สิ่งนี้จะเปิดใช้งานเคอร์เซอร์เมื่อคีย์บอร์ดถูกเปิดและปิดการใช้งานเมื่อคีย์บอร์ดถูกปิด
ใน kotlin your_edittext.isCursorVisible = false