添加链接
link之家
链接快照平台
  • 输入网页链接,自动生成快照
  • 标签化管理网页链接
相关文章推荐
满身肌肉的保温杯  ·  大疆DJI Air ...·  1 年前    · 
俊逸的青蛙  ·  jquery mobile ...·  1 年前    · 
路过的洋葱  ·  org.openqa.selenium.Ja ...·  1 年前    · 
踢足球的奔马  ·  How to convert object ...·  2 年前    · 

我应该设置什么来禁用EditText?

1 个评论
caw
我们可以同时保留视图的样式和滚动行为。要禁用一个 EditText ,同时保留这个属性,只需使用 UI.setReadOnly(myEditText, true) ,从 这个图书馆 .如果你想在没有库的情况下复制这种行为,请查看 the source code 为这个小方法。
android
android-edittext
Hesam
Hesam
发布于 2010-11-29
26 个回答
Julian
Julian
发布于 2018-08-18
已采纳
0 人赞同

I believe the correct would be to set android:editable="false" .

如果你想知道为什么我的链接指向了 TextView 的属性,你的答案是因为 EditText inherits from TextView :

EditText是一个薄薄的贴面,覆盖在 的薄层,它将自己配置为 正如下面的评论中提到的, editable 已经被废弃了( 自API 3级以来 ).你应该改用 inputType (值为 none )。

谢谢Nailuj,不幸的是,它没有起作用。在添加了你的建议后,键盘弹出,有能力改变文本。
android:editable已经过时了。android:inputType="none "应该被用来代替,但它包含了bug,不能工作。如果我们都能在这里提出问题,那就更好了。 code.google.com/p/android/issues/detail?id=2854
editText.setEnabled(false); editText.setInputType(InputType.TYPE_NULL);
替换代码0】对我来说很好用(忘了deprecated,我认为android:editable和android:inputType没有关系)。
对于所有那些android:inputType="none "不工作的人来说,请尝试:android:inputType="none "与android:focusable="false"
Sean Android
Sean Android
发布于 2018-08-18
0 人赞同

使用 EditText.setFocusable(false) 来禁止编辑。
替换代码1】以启用编辑。

它可以工作,但这不是一个好的做法,因为视图看起来可以编辑,但它不能。对我来说工作很好,因为我的视图有一个自定义背景,所以+1。
@kaneda.其实我更喜欢这样。我不希望我的方框是灰色的。 :)
在安卓4.4系统中,这个选项可以保持原来的文字颜色。使用 editText.setEnabled(false); 会将文本颜色改为灰色。然而,在使用 setEnabled 时,spinners并不改变文本颜色,这使得它的体验不一致。
为什么不是 setFocusable(true) ? 关于 setFocusable() setFocusableInTouchMode() 的区别,请看这个链接。 stackoverflow.com/questions/23799064/...
这确实符合我的需要。我创建了一个复合自定义视图,里面有一个EditText。我有一个问题,就是让我的自定义视图只接受点击,但不能编辑,因为它启动了一个日期选择器对话框。这个解决方案很有效,因为它没有禁用onClickListeners。
Maksym Kalin
Maksym Kalin
发布于 2018-08-18
0 人赞同

你可以尝试以下方法。

 private void disableEditText(EditText editText) {
    editText.setFocusable(false);
    editText.setEnabled(false);
    editText.setCursorVisible(false);
    editText.setKeyListener(null);
    editText.setBackgroundColor(Color.TRANSPARENT); 

启用了编辑文本。

禁用编辑文本。

这对我来说很有效,希望它能帮助你。

这看起来像一个TextView。这真是太神奇了。这就是我所寻找的。
如果有人遇到同样的启用问题,你必须调用 editText.setFocusableInTouchMode(true) 而不是 editText.setFocusable(true)
Sampath Kumar
Sampath Kumar
发布于 2018-08-18
0 人赞同

用这个来禁止用户输入

android:focusable="false"

android:editable="false"该方法已被废弃。

这应该是公认的答案。按照其他答案中的建议,将输入类型设置为 "无 "并不(总是)有效。将 "启用 "设置为 "假 "可以防止编辑,但也会使文本变暗,这可能是我们想要的,也可能不是。
Linh
Linh
发布于 2018-08-18
0 人赞同

对于禁用的编辑 EditText ,我认为我们可以使用 focusable OR enable but

  • Using android:enabled=... or editText.setEnabled(...)

    它还 变化 EditText 中的文字颜色改为灰色。
    当点击时,它没有效果

  • Using android:focusable=... or editText.setFocusable(false) - editText.setFocusableInTouchMode(true)

    It 不变 text color of EditText
    当点击时,它突出了 EditText 的底线,大约几毫秒。

  • Output

    你可以在添加 android:longClickable="false" 的同时添加 android:focusable="false" ,以便在触摸此视图时删除临时高亮。 这也可以防止出现 "全部选择 "的弹出窗口。
    @CzarMatt 你应该用光标可见为假来代替
    使用键盘的回车键和前一个编辑文本的imeoptions next,你仍然可以在那里输入。
    当android:focusable="false "时,如何使文本可选择?
    Bhargav Thanki
    Bhargav Thanki
    发布于 2018-08-18
    0 人赞同

    由于 android:editable="false" 被取消了。你可以使用InputType TYPE_NULL on EditText

    use like this :

    editText.setInputType(InputType.TYPE_NULL);
        
    我喜欢这个答案,因为它没有禁用字段上的onClickListener。
    如果输入类型是密码,该怎么做?TYPE_NULL使密码可见。
    android_jain
    android_jain
    发布于 2018-08-18
    0 人赞同

    As android:editable="false" deprecated In xml

    Use android:enabled="false" it's simple. Why use more code?

    如果你想在 java class 中,你也可以通过编程来使用这个方法

     editText.setEnabled(false);
        
    使用android:enabled="true "来启用。
    在我的情况下,我想禁止编辑,但不禁止滚动,这将使滚动失效。
    Oded Breiner
    Oded Breiner
    发布于 2018-08-18
    0 人赞同

    Simply:

    editText.setEnabled(false);
        
    Onik
    它与之前的答案(所以为问题)有什么不同?
    setFocusable(false)也让你设置一个OnClickListener。
    Suri
    Suri
    发布于 2018-08-18
    0 人赞同

    要禁用一个编辑文本的功能,只需使用。

    EditText.setInputType(InputType.TYPE_NULL);
    

    以防你想以某种方式启用它,那么你可以使用。

    EditText.setInputType(InputType.TYPE_CLASS_TEXT);
        
    如果输入类型是密码,该怎么做?TYPE_NULL使密码可见。
    是的,这破坏了任何一种特定的输入(比如在我的例子中,textMultiLine)。
    Aminul Haque Aome
    Aminul Haque Aome
    发布于 2018-08-18
    0 人赞同

    我使用谷歌新发布的Material Design Library。在我的案例中,当我使用 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>
        
    Rank
    Rank
    发布于 2018-08-18
    0 人赞同

    在类中设置以下属性。

    editText.setFocusable(false);
    editText.setEnabled(false);
    

    它将按照你的要求顺利地工作。

    只有 enabled 是足够的
    Mark Joshua Fajardo
    Mark Joshua Fajardo
    发布于 2018-08-18
    0 人赞同

    这将使你的编辑文本 残疾人 .

    editText.setEnabled(false);
    

    而通过使用这个

    editText.setInputType(InputType.TYPE_NULL);
    

    将只是使你的编辑文本not show你的软键盘,但如果它连接到一个物理键盘,它将让你输入。

    如果输入类型是密码,该怎么做?TYPE_NULL使密码可见。
    Rohit Singh
    Rohit Singh
    发布于 2018-08-18
    0 人赞同

    Disable = FOCUS+CLICK+CURSOR

    禁用焦点、点击和光标可见性对我来说是个好办法。

    Here is the code in 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"
        
    wangzhengyi
    wangzhengyi
    发布于 2018-08-18
    0 人赞同

    如果你使用 android:editable="false" ,eclipse会提醒你这个信息 "android:editable is deprecated:使用inputType代替"。

    所以,我用 android:focusable="false" 代替,对我来说效果不错。

    emkarachchi
    emkarachchi
    发布于 2018-08-18
    0 人赞同
    android:editable="false"
    

    现在已被弃用,使用

     YourEditText.setInputType(InputType.TYPE_NULL);
        
    如果输入类型是密码,该怎么做?TYPE_NULL使密码可见。
    @ilyamuromets 这个答案可能有帮助 stackoverflow.com/a/16720520/7704650 with TYPE_TEXT_VARIATION_PASSWORD Follow this for more developer.android.com/reference/android/text/InputType
    ilyamuromets
    我想在软键盘打开和用户试图输入文本时禁止在EditText中输入。InputType.TYPE_NULL在isFocusable和isFocusableInTouchMode为false值时效果很好。但是如果输入框的输入类型是textPassword,那么InputType.TYPE_NULL会使密码值可见。如果我设置InputType.TYPE_NULL | InputType.TYPE_TEXT_VARIATION_PASSWORD,那么密码也变得可见,用户可以输入文本。
    user14551921
    发布于 2018-08-18
    0 人赞同

    使用 android:editable="false" 会被取消。相反,你需要使用 android:focusable="false"

    使用键盘的回车键和前一个编辑文本的imeoptions next,你仍然可以在那里输入。
    cx0der
    cx0der
    发布于 2018-08-18
    0 人赞同

    Use TextView instead.

    Rishabh876
    Rishabh876
    发布于 2018-08-18
    0 人赞同

    在我的例子中,我需要我的 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());  
            mEdittext.setCursorVisible(false);
            mEdittext.setKeyListener(null);
        
    Favas Kv
    Favas Kv
    发布于 2018-08-18
    0 人赞同

    Try this one, works fine for me:

    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); ,否则keyboardpopup在第一时间。

    Vodet
    Vodet
    发布于 2018-08-18
    0 人赞同

    正如一些答案所提到的,如果你禁用editText,他就会变成灰色,如果你设置focusable false,光标就会显示出来。

    If you would like to do it only with xml this did the trick

           <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就无法被点击。

    Annie
    Annie
    发布于 2018-08-18
    0 人赞同

    This works for me:

    android:focusable="false"

    o-90
    这与Sampath Kumar四年前的帖子有什么不同?
    Tom Howard
    Tom Howard
    发布于 2018-08-18
    0 人赞同

    从@Asymptote对已接受答案的评论中,使用。

    myEditText.setEnabled(false);
    myEditText.setInputType(InputType.TYPE_NULL);
    

    ...而鲍勃是你的叔叔。

    Sira Lam
    Sira Lam
    发布于 2018-08-18
    0 人赞同

    今天我仍然使用 editable="false" ,但也使用 focusable="false"

    我认为我们需要使EditText不可编辑的情况,是因为我们想保持它的EditText风格(有下划线,有提示,等等),但它接受其他的输入而不是文本。例如,一个下拉列表。

    在这种使用情况下,我们需要让 EditText 可以点击(因此 enabled="false" 不适合)。然而,设置 focusable="false" 可以做到这一点。 我仍然可以长按EditText,从剪贴板上粘贴我自己的文本。 .根据你的代码和处理方式,这甚至会使你的应用程序崩溃。

    所以我也用了 editable="false" ,现在一切都很好,除了警告。

    M.Usman
    M.Usman
    发布于 2018-08-18
    0 人赞同

    你可以使用 android:focusable="false" 但也需要禁用光标,否则 复制/粘贴功能仍然可以工作。

    so, use

    android:focusable="false"
    android:cursorVisible="false"
        
    DeepBlue
    DeepBlue
    发布于 2018-08-18
    0 人赞同

    有多个是如何实现多层次的残疾人。

  • editText.setShowSoftInputOnFocus(false); and editText.setFocusable
  • 阻止 EditText 显示键盘--在一些文本中书写。但光标仍然可见,用户可以粘贴一些文字。

  • editText.setCursorVisible(false)
  • hides the cursor. Not sure why would you want to do that tho. User can input text & paste.

  • editText.setKeyListener(null)
  • 我觉得这种方式最方便。虽然没有办法让用户输入文本,但是如果你想在用户触摸它的时候触发动作,小部件仍然可以使用 OnClickListener

  • editText.setEnabled(false);
  • 完全禁用 EditText 。它是字面上的 "只读",用户不能在其中输入任何文本,(例如) OnClickListener doesn't work with it.