长按启用EditText(或按钮)

时间:2014-03-27 12:55:12

标签: android android-edittext android-button

在我的应用程序中EditText是禁用的,我想在这个edittext上实现长按选项(当禁用模式时)启用它并允许从软键输入字符。

实施例: -

假设我最初允许用户在EditText中输入一些数字。经过一些操作后,我需要禁用此EditText。再次,如果用户想要更改先前在editText中输入的数字,那么首先他需要长按此editText。 在长按此editText后,editText得到启用,用户将能够再次更改或重新键入该号码。我需要在更改editText中的数字之前进行一些操作,并且在操作期间用户没有任何选项来更改editText中的数字。

代码: -

<EditText
        android:id="@+id/eTextBillNoFrmReturn"
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:layout_marginRight="2dp"
        android:layout_weight="7"
        android:clickable="true"
        android:background="@drawable/custom_edit_text"
        android:inputType="number" />

@Override
public boolean onLongClick(View v) {
    // do some operation
    return false;
}

但是此代码只能启用EditText。禁用EditText时长按不起作用。

4 个答案:

答案 0 :(得分:0)

Try this one.

@Override
public boolean onLongClick(View v) {
    // do some operation
btnname.setenable(true);
btnname.setfocusable(true);
    return false;
}

答案 1 :(得分:0)

万一有人像我一样偶然发现了这个旧帖子,我以为我会发布答案,因为我发现一些适合我情况的设置。

OP正在寻求一种方法来使EditText函数像被禁用一样,但仍允许设置可以被调用的长按侦听器。

将编辑文本设置为不可聚焦,并将输入类型设置为无。输入类型为none可以使光标单击时不尝试显示它,因此它看起来比只闪烁一秒钟的光标(将focusable设置为false)好一点。

要在XML中执行此操作:

<EditText
    android:id="@+id/txtYourEditTextID"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:focusable="false"
    android:inputType="none" />

要在代码中执行此操作:

EditText txtYourEditText = (EditText)findViewById(R.id.txtYourEditTextID);
txtYourEditText.setFocusable(false);
txtYourEditText.setInputType(InputType.TYPE_NULL);

要执行OP所需的操作,您将实现长按监听器:

txtYourEditText.setOnLongClickListener(new View.OnLongClickListener {
    @Override
    public boolean onLongClick(View v) {
        ((EditText)v).setInputType(InputType.TYPE_CLASS_NUMBER);
        v.setFocusable(true);
        return true; //or return false if you do not want to consume the event
    }
});

然后对要再次禁用它的任何操作,调用

txtYourEditText.setFocusable(false);
txtYourEditText.setInputType(InputType.TYPE_NULL);

希望这会对尝试做类似事情的人有所帮助。

答案 2 :(得分:-1)

您是否尝试过更换

return false;

通过

return true;

onLongClick(View v)方法上?

答案 3 :(得分:-1)

使用切换按钮,完美适合您的情况 Toggle Button