Answers:
我相信正确的选择是确定android:editable="false"
。
如果您想知道为什么我的链接指向的属性TextView
,您的答案是因为EditText
继承自TextView
:
EditText是TextView上的薄单板,可将其配置为可编辑的。
更新:
如以下注释中所述,editable
已弃用(自API级别3以来)。您应该改为使用inputType
(带有值none
)。
editText.setEnabled(false); editText.setInputType(InputType.TYPE_NULL);
android:editable="false" android:focusable="false"
对我来说很棒(忘了弃用,我认为android:editable与android:inputType无关)
用于EditText.setFocusable(false)
禁用编辑
EditText.setFocusableInTouchMode(true)
以启用编辑;
editText.setEnabled(false);
会将文本颜色更改为灰色。但是,微调器在使用时不会更改文本颜色setEnabled
,因此会带来不一致的体验。
setFocusable(true)
呢?看到这个链接之间的区别setFocusable()
和setFocusableInTouchMode()
:stackoverflow.com/questions/23799064/...
您可以尝试以下方法:
private void disableEditText(EditText editText) {
editText.setFocusable(false);
editText.setEnabled(false);
editText.setCursorVisible(false);
editText.setKeyListener(null);
editText.setBackgroundColor(Color.TRANSPARENT);
}
启用EditText:
禁用EditText:
它对我有用,希望对您有帮助。
editText.setFocusableInTouchMode(true)
代替editText.setFocusable(true)
。
使用此功能禁用用户输入
android:focusable="false"
android:editable =“ false”不推荐使用此方法。
如前所述。android:editable="false"
您可以在EditText上使用InputType TYPE_NULL
像这样使用:
editText.setInputType(InputType.TYPE_NULL);
由于android:editable="false"
弃用xml
使用
android:enabled="false"
很简单。为什么要使用更多代码?
如果您愿意,java class
还可以以编程方式使用此功能
editText.setEnabled(false);
只是:
editText.setEnabled(false);
在类中设置以下属性:
editText.setFocusable(false);
editText.setEnabled(false);
它会根据您的要求顺利运行。
enabled
足够
要禁用EditText的功能,只需使用:
EditText.setInputType(InputType.TYPE_NULL);
如果您想以某种方式启用它,则可以使用:
EditText.setInputType(InputType.TYPE_CLASS_TEXT);
android:editable="false"
现在已弃用并使用
YourEditText.setInputType(InputType.TYPE_NULL);
TYPE_TEXT_VARIATION_PASSWORD
按照本作更developer.android.com/reference/android/text/InputType
禁用焦点,单击和光标可见性对我来说有用。
这是XML中的代码
<EditText
android:id="@+id/name"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:focusable="false"
android:cursorVisible="false"
android:clickable="false"
/>
这将使您的edittext 禁用。
editText.setEnabled(false);
并通过使用
editText.setInputType(InputType.TYPE_NULL);
只会使您的Edittext 不显示您的软键盘,但是如果将它连接到物理键盘,它将允许您键入。
我使用的是Google新发布的材料设计库。就我而言,当我使用android:focusable =“ false”和android:cursorVisible =“ false”时,它可以工作
<com.google.android.material.textfield.TextInputLayout
android:id="@+id/to_time_input_layout"
app:endIconMode="custom"
app:endIconDrawable="@drawable/ic_clock"
app:endIconContentDescription="ToTime"
app:endIconTint="@color/colorAccent"
style="@style/OutlinedEditTextStyle"
android:hint="To Time">
<com.google.android.material.textfield.TextInputEditText
android:id="@+id/to_time_edit_text"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:focusable="false"
android:cursorVisible="false" />
</com.google.android.material.textfield.TextInputLayout>
就我而言EditText
,如果没有,我需要滚动文本。的行数超过maxLines
其禁用时间。这个实现对我来说非常完美。
private void setIsChatEditTextEditable(boolean value)
{
if(value)
{
mEdittext.setCursorVisible(true);
mEdittext.setSelection(chat_edittext.length());
// use new EditText(getApplicationContext()).getKeyListener()) if required below
mEdittext.setKeyListener(new AppCompatEditText(getApplicationContext()).getKeyListener());
}
else
{
mEdittext.setCursorVisible(false);
mEdittext.setKeyListener(null);
}
}
试试这个,对我来说很好:
public class CustomEdittext extends EditText {
Boolean mIsTextEditor=true;
public CustomEdittext(Context context, AttributeSet attrs) {
super(context, attrs);
// TODO Auto-generated constructor stub
}
@Override
public boolean onCheckIsTextEditor() {
// TODO Auto-generated method stub
return mIsTextEditor;
}
@Override
public boolean onTouchEvent(MotionEvent event) {
// TODO Auto-generated method stub
mIsTextEditor=false;
Boolean mOnTouchEvent=super.onTouchEvent(event);
mIsTextEditor=true;
return mOnTouchEvent;
} }
注意:您需要添加this.getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_HIDDEN);
活动,否则keyboard
将在第一时间弹出。
就像一些答案提到的那样,如果禁用editText,他会变成灰色,如果将focus设置为false,则会显示光标。
如果您只想使用xml,那么就可以了
<YourFloatLabel
android:layout_width="match_parent"
android:layout_height="wrap_content">
<EditText
android:id="@+id/view_ads_search_select"
android:layout_width="match_parent"
android:layout_height="wrap_content" />
<FrameLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:focusable="true"
android:clickable="true"/>
</YourFloatLabel>
我只是添加一个出现在editText上方的FrameLayout并将其设置为可聚焦和可单击,以使editText不能被单击。
今天我仍然用editable="false"
,也用focusable="false"
。
我认为我们需要使EditText不可编辑的情况是,因为我们希望保持其EditText样式(带有下划线,带有提示等),但是它接受其他输入而不是文本。例如,一个下拉列表。
在这种用例中,我们需要EditText
可点击的(因此enabled="false"
不合适)。设置focusable="false"
此技巧后,我仍然可以长时间按住EditText并将自己的文本从剪贴板粘贴到该文本上。根据您的代码和处理方式,这甚至可能使您的应用程序崩溃。
所以我也习惯editable="false"
了,除了警告,一切都很好。
有多个是如何实现多个级别的残疾人的。
editText.setShowSoftInputOnFocus(false);
和 editText.setFocusable
防止EditText
显示键盘-输入一些文字。但是光标仍然可见,用户可以粘贴一些文本。
editText.setCursorVisible(false)
隐藏光标。不知道为什么要这么做。用户可以输入文字并粘贴。
editText.setKeyListener(null)
我觉得这种方式最方便。用户无法输入文本,但是OnClickListener
如果要在用户触摸时触发操作,则仍可以使用小部件
editText.setEnabled(false);
完全禁用EditText
。它实际上是“只读”的,用户不能在其中输入任何文本,并且(例如)OnClickListener
不能使用它。
TextEdit 文档
在您的XML代码中进行设置,即可正常工作。
android:focusableInTouchMode =“ false”
EditText
在保留此属性的同时禁用它,只需UI.setReadOnly(myEditText, true)
在此库中使用。如果要在没有库的情况下复制此行为,请查看此小方法的源代码。