在Android中禁用EditText

时间:2010-11-28 16:29:36

标签: android android-edittext

在我的应用程序中,我有一个EditText。我希望用户只具有读访问权限而不是写访问权限。 在代码中,我设置了android:enabled="false"。虽然EditText的背景变为黑暗,但当我点击它时,键盘会弹出,我可以更改文字。

我该怎么办? 感谢

26 个答案:

答案 0 :(得分:212)

我认为正确的是设置android:editable="false"

如果您想知道为什么我的链接指向TextView的属性,那么答案是因为EditText继承自TextView

  

EditText是一个薄的贴面   配置自己的TextView   可编辑的。

<强>更新
如下面的评论中所述,editable已弃用(since API level 3)。您应该使用inputType(值none)。

答案 1 :(得分:150)

使用EditText.setFocusable(false)禁用编辑 EditText.setFocusableInTouchMode(true)启用编辑功能;

答案 2 :(得分:55)

使用此选项禁用用户输入

android:focusable="false"

android:editable =“false”此方法已被弃用。

答案 3 :(得分:53)

您可以尝试以下方法:

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

启用EditText:

Enabled EditText

已禁用EditText:

Disabled EditText

它对我有用,希望对你有帮助。

答案 4 :(得分:23)

对于禁用修改EditText,我认为我们可以使用focusable enable,但

  1. 使用android:enabled=...editText.setEnabled(...)

    EditText中的文字颜色更改为为灰色 点击它没有任何影响

  2. 使用android:focusable=...editText.setFocusable(false) - editText.setFocusableInTouchMode(true)

    不会改变 EditText的文字颜色 点击它会突出显示EditText底线大约几毫秒

  3. <强>输出

    enter image description here

答案 5 :(得分:18)

android:editable="false"已被删除。您可以在EditText上使用InputType TYPE_NULL

像这样使用:

editText.setInputType(InputType.TYPE_NULL);

答案 6 :(得分:15)

由于android:editable="false"已弃用 在xml

  

使用android:enabled="false"这很简单。为什么要使用更多代码?

如果你想进入java class,你也可以通过编程方式使用

 editText.setEnabled(false);

答案 7 :(得分:9)

简单地:

editText.setEnabled(false);

答案 8 :(得分:5)

我使用的是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>

答案 9 :(得分:5)

在课堂上设置以下属性:

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

它将按您的要求顺利运作。

答案 10 :(得分:4)

改为使用TextView

答案 11 :(得分:4)

Disable = FOCUS + CLICK + CURSOR

禁用焦点,单击和光标可见性对我来说是成功的秘诀。

这是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"
    />

答案 12 :(得分:4)

如果您使用android:editable="false",eclipse会提醒您此消息“android:editable is deprecated:使用inputType代替”。

所以,我使用android:focusable="false"代替,它对我来说效果很好。

答案 13 :(得分:2)

 YourEditText.setInputType(InputType.TYPE_NULL);

现在已弃用并使用

resolve()

答案 14 :(得分:1)

在我的情况下,如果没有,我需要我的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);
    }
}

答案 15 :(得分:1)

试试这个,对我来说很好用:

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); ,或者首次<{1}} 弹出

答案 16 :(得分:1)

如某些答案所述,如果禁用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不能被单击。

答案 17 :(得分:1)

这将使您的编辑文本被禁用

editText.setEnabled(false);

并通过使用

editText.setInputType(InputType.TYPE_NULL);

只会使您的Edittext 不显示,但如果它连接到物理键盘,则可以让您键入。

答案 18 :(得分:0)

不推荐使用 android:editable="false"。相反,您需要使用 android:focusable="false"

答案 19 :(得分:0)

要禁用EditText的功能,只需使用:

buf

如果要以某种方式启用它,则可以使用:

EditText.setInputType(InputType.TYPE_NULL);

答案 20 :(得分:0)

如何实现多种程度的残疾。

  • editText.setShowSoftInputOnFocus(false);editText.setFocusable

防止EditText显示键盘-使用某些文字书写。但是光标仍然可见,用户可以粘贴一些文本。

  • editText.setCursorVisible(false)

隐藏光标。不知道为什么要这么做。用户可以输入文字并粘贴。

  • editText.setKeyListener(null)

我觉得这种方式最方便。用户无法输入文本,但是如果您想在用户触摸时触发操作,则小部件仍可以与OnClickListener一起使用

  • editText.setEnabled(false);

完全禁用EditText。它实际上是“只读的”,用户无法在其中输入任何文本,并且OnClickListener 不能使用它。

TextEdit documentation

答案 21 :(得分:0)

您可以使用android:focusable="false",但也需要禁用光标 复制/粘贴功能仍然有效。

所以,使用

android:focusable="false"
android:cursorVisible="false"

答案 22 :(得分:0)

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

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

在这种用例中,我们需要EditText可点击(因此enabled="false"不合适)。设置focusable="false"可以做到这一点,然而,我仍然可以长时间保持EditText并将自己的文本从剪贴板粘贴到它上面。根据您的代码和处理方式,这甚至可能导致您的应用崩溃。

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

答案 23 :(得分:0)

从@ Asymptote评论接受的答案,请使用:

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

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

答案 24 :(得分:-1)

在您的XML代码中进行设置,即可使用。

android:focusableInTouchMode =“ false”

答案 25 :(得分:-1)

这对我有用:

机器人:可聚焦= “假”