ทุกคนสามารถบอกวิธีทำให้EditText
ไม่สามารถแก้ไขได้ผ่านทาง XML หรือไม่ ฉันพยายามตั้งค่าandroid:editable
ให้false
แต่
- มันเลิกใช้แล้ว; และ
- มันไม่ทำงาน
ทุกคนสามารถบอกวิธีทำให้EditText
ไม่สามารถแก้ไขได้ผ่านทาง XML หรือไม่ ฉันพยายามตั้งค่าandroid:editable
ให้false
แต่
คำตอบ:
ใช้รหัสง่ายๆนี้:
textView.setKeyListener(null);
มันได้ผล.
แก้ไข: หากต้องการเพิ่มในKeyListener
ภายหลังให้ทำดังต่อไปนี้
1: ตั้งค่าผู้ฟังคีย์เป็นแท็กของ textView
textView.setTag(textView.getKeyListener());
textView.setKeyListener(null);
2: รับฟังคีย์จากแท็กและตั้งค่ากลับเป็น textView
textView.setKeyListener((KeyListener) textView.getTag());
setFocusable()
เพราะหมอบอกว่าการใช้งานเริ่มต้นอาจมีการเปลี่ยนแปลงหากมีการเปลี่ยนแปลง
เพิ่มลงในไฟล์ EditText xml ของคุณ:
<EditText ...
android:clickable="false"
android:cursorVisible="false"
android:focusable="false"
android:focusableInTouchMode="false">
</EditText>
android:editable="false"
มันจะทำผลเช่นเดียวกับ ทำงานให้ฉันหวังว่ามันจะได้ผลกับคุณเช่นกัน
TextInputLayout
ให้ Edittext ของคุณเป็น
EditText editText;
editText.setKeyListener(null);
จะทำงาน แต่ก็ไม่ได้ฟังกุญแจ
ผู้ใช้สามารถเห็นเคอร์เซอร์บน edittext
คุณสามารถลอง editText.setEnabled(false);
นั่นหมายความว่าผู้ใช้ไม่เห็นเคอร์เซอร์ TextView
เพียงแค่บอกว่ามันจะกลายเป็น
ดังที่กล่าวไว้ในคำตอบอื่น ๆ คุณสามารถทำได้setEnabled(false)
แต่เมื่อคุณถามวิธีตั้งค่าผ่าน XML นี่คือวิธีการทำ
เพิ่มแอตทริบิวต์ต่อไปนี้ของคุณEditText
:
android:enabled="false"
enabled
ไม่ได้คัดค้าน editable
คือ.
ปิดการใช้งานจาก XML (หนึ่งบรรทัด):
android:focusable="false"
เปิดใช้งานอีกครั้งจาก Java ถ้าต้องการ (ยังเป็นหนึ่งบรรทัด):
editText.setFocusableInTouchMode(true);
พวกเขาทำให้ "แก้ไขได้" เลิกใช้แล้ว แต่ไม่มีการทำงานที่สอดคล้องกันใน inputType
ยังไงก็ตาม inputType = "none" มีผลกระทบอะไรบ้าง? ใช้งานหรือไม่สร้างความแตกต่างเท่าที่ฉันเห็น
ตัวอย่างเช่น editText เริ่มต้นถูกกล่าวว่าเป็นบรรทัดเดียว แต่คุณต้องเลือก inputType เพื่อให้เป็นบรรทัดเดียว และถ้าคุณเลือก "ไม่มี" ก็ยังคงเป็นแบบหลายบรรทัด
ชุดนี้ทำงานให้ฉัน:
<EditText ... >
android:longClickable="false"
android:cursorVisible="false"
android:focusableInTouchMode="false"
</EditText>
ดังที่คุณกล่าวถึง android: สามารถแก้ไขได้เลิกใช้แล้ว android: inputType = "none" ควรใช้แทน แต่ไม่สามารถใช้งานได้เนื่องจากข้อบกพร่อง ( https://code.google.com/p/android/issues/detail?id=2854 )
แต่คุณสามารถบรรลุสิ่งเดียวกันโดยใช้ focusable
ผ่าน XML:
<EditText ...
android:focusable="false"
</EditText>
จากรหัส:
((EditText) findViewById(R.id.LoginNameEditText)).setFocusable(false);
หากคุณต้องการคลิก แต่ไม่ต้องการแก้ไขลอง:
android:focusable="false"
android:enabled="false"
ใช้เพียงแค่ สิ่งนี้จะทำให้มีลักษณะEditText
ที่จะทำให้ดูไม่สามารถแก้ไขได้
<EditText
android:id="@+id/txtDate"
android:layout_width="140dp"
android:layout_height="wrap_content"
android:layout_marginLeft="5dp"
android:layout_marginRight="10dp"
android:layout_marginTop="2dp"
android:clickable="false"
android:cursorVisible="false"
android:gravity="center" />
และใช้ดังต่อไปนี้:
txtDate.setKeyListener(null);
หากคุณต้องการที่จะทำมันในรหัส java เพียงแค่ใช้บรรทัดนี้เพื่อปิดการใช้งาน:
editText.setEnabled(false);
และนี่เพื่อเปิดใช้งาน:
editText.setEnabled(true);
ฉันพยายามทำ:
textView.setInputType( InputType.TYPE_NULL );
ซึ่งควรทำงานได้ แต่สำหรับฉันมันไม่ได้
ฉันจบด้วยรหัสนี้:
textView.setKeyListener(new NumberKeyListener() {
public int getInputType() {
return InputType.TYPE_NULL;
}
protected char[] getAcceptedChars() {
return new char[] {};
}
});
ซึ่งทำงานได้อย่างสมบูรณ์แบบ
เมื่อฉันต้องการให้กิจกรรมไม่เน้น EditText และไม่แสดงแป้นพิมพ์เมื่อคลิกนี่คือสิ่งที่ใช้ได้กับฉัน
การเพิ่มคุณสมบัติให้กับเค้าโครงหลัก
android:descendantFocusability="beforeDescendants"
android:focusableInTouchMode="true"
จากนั้นฟิลด์ EditText
android:focusable="false"
android:focusableInTouchMode="false"
นี่คือตัวอย่าง:
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/activity_home"
android:background="@drawable/bg_landing"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingBottom="0dp"
android:paddingLeft="0dp"
android:paddingRight="0dp"
android:paddingTop="@dimen/activity_vertical_margin"
android:descendantFocusability="beforeDescendants"
android:focusableInTouchMode="true"
tools:context="com.woppi.woppi.samplelapp.HomeActivity">
<EditText
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:background="@null"
android:inputType="textPersonName"
android:ems="10"
android:id="@+id/fromEditText"
android:layout_weight="1"
android:hint="@string/placeholder_choose_language"
android:textColor="@android:color/white"
android:textColorHint="@android:color/darker_gray"
android:focusable="false"
android:focusableInTouchMode="false"
android:onClick="onSelectFromLanguage" />
</RelativeLayout>
นอกจาก @mahe madi คุณสามารถลองได้เช่นกัน
editText.setEnabled(false);
editor.setTextColor(Color.BLACK);
วิธีนี้จะซ่อนเคอร์เซอร์เสียโฟกัสและตั้งค่าสีของข้อความเป็นสีดำเหมือน TextView
และการย้อนกลับไปที่ editText ทำได้ง่ายๆเพื่อรับคุณสมบัติทั้งหมดของ EditText
editText.setEnabled(true);
หวังว่าจะช่วย :)
คุณสามารถใช้android:editable="false"
แต่ฉันอยากจะแนะนำให้คุณใช้จริงๆsetEnabled(false)
เพราะมันให้เงื่อนงำภาพแก่ผู้ใช้ว่าไม่สามารถแก้ไขการควบคุมได้ คิวภาพที่เหมือนกันถูกใช้โดยวิดเจ็ตที่ถูกปิดใช้งานทั้งหมดและความสอดคล้องเป็นสิ่งที่ดี
android:focusable="false"
android:clickable="false"
android:longClickable="false"
แอตทริบิวต์ "longClickable" ปิดใช้งานการดำเนินการกดแบบยาวที่ทำให้ตัวเลือก "วาง" และหรือ "เลือกทั้งหมด" เพื่อแสดงเป็นคำแนะนำเครื่องมือ
ฉันได้ลองทำสิ่งต่อไปนี้แล้ว:
codeEditText.setInputType(InputType.TYPE_NULL);
this.codeEditText.setOnFocusChangeListener(new OnFocusChangeListener() {
@Override
public void onFocusChange(View v, boolean hasFocus) {
if (hasFocus) {
pickCode();
}
}
});
this.codeEditText.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
pickCode();
}
});
แต่ปัญหาคือถ้าข้อความแก้ไขเป็นครั้งแรกในรูปแบบนั้นจะได้รับการมุ่งเน้นและรหัส pickCode () ซึ่งเปิดตัวกิจกรรมใหม่ที่เรียกว่าทันที ดังนั้นฉันจึงแก้ไขโค้ดดังต่อไปนี้และดูเหมือนว่าจะทำงานได้ค่อนข้างดี (ยกเว้นฉันไม่สามารถตั้งค่าโฟกัสที่การแก้ไขข้อความ แต่ฉันไม่ต้องการ):
itemCodeEditText.setFocusable(false);
this.itemCodeEditText.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
pickItem();
}
});
ขอแสดงความนับถืออย่างสูง,
ความเห็นยินดีต้อนรับ
John Goche
ฉันใช้EditText.setFocusable(false)
และตั้งค่าจริงอีกครั้งหากฉันต้องการแก้ไข
ลองสิ่งนี้:
android:inputType="none"
วิธีนี้ทำงานให้ฉันฉันสามารถเลือกและคัดลอกไปยังคลิปบอร์ด แต่ฉันไม่สามารถแก้ไขหรือวางได้
android:enable="true"
android:textIsSelectable="true"
android:inputType="none"
android: ไม่สามารถแก้ไขได้ดังนั้นให้ใช้inputTypeแทน
<EditText
android:id="@+id/editText_x"
android:layout_width="0dp"
android:layout_height="fill_parent"
android:layout_weight="70"
android:inputType="none"
android:hint="@string/enter_x" />
ผมได้ประสบปัญหาเดียวกัน แต่หลังจากการสังเกตพบว่าandroid:editable="false"
เป็นเพียงการทำงานเมื่อ inputtype ( android:inputType="ANY_VALUE"
) จะไม่ได้รับใน EditText
ลบ inputType จาก EditText และใช้ editable = false มันทำงานได้ดี
ฉันแก้ไขปัญหานี้ด้วยกล่องโต้ตอบ
AlertDialog dialog;
EditText _editID;
TextView _txtID;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_principal);
_txtID = (TextView) findViewById(R.id._txtID);
dialog = new AlertDialog.Builder(this).create();
_editID = new EditText(this);
_editID.setInputType(InputType.TYPE_NUMBER_FLAG_SIGNED);
dialog.setTitle("Numero do Registro:");
dialog.setView(_editID);
dialog.setButton(DialogInterface.BUTTON_POSITIVE, "IR", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
_txtID.setText(_editID.getText());
toId(Integer.parseInt((_editID.getText().toString())));
}
});
dialog.setButton(DialogInterface.BUTTON_NEGATIVE, "CANCELAR", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
dialog.dismiss();
}
});
_txtID.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
_txtID.setText("_editID.getText()");
//_editID.setText("");
dialog.show();
}
});
คำตอบสั้น ๆ :
ฉันใช้android:focusable="false"
และใช้งานได้ คลิกฟังยังทำงานอยู่ในขณะนี้
ลอง
.setInputType(InputType.TYPE_NULL);
ลองรหัสนี้ มันทำงานในโครงการของฉันดังนั้นมันจะทำงานในโครงการของคุณ
android:editable="false"