长按激活EditText(或按钮)

3
在我的应用程序中,有一个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被禁用时,长按操作将无法使用。

1
我认为使用OnTouchListner应该是可能的,请参见此处https://dev59.com/SGgv5IYBdhLWcg3wF89P - Hardik
你有解决方案吗? - Hardik
@Hardik...不好意思,我还没有找到解决方案。你提供的链接是针对按钮的问题。但在我的情况下,它是针对EditText的。如果我更改EditText的背景,使其看起来像禁用状态,那么此时用户也可以输入文本。 - Vinit ...
我想指出Tal Kanel的答案还没有被接受,请检查一下。 - Hardik
4个回答

0

如果有人像我一样发现了这篇旧帖子,我想发布一个答案,因为我找到了适合我的情况的一些设置。

原始贴文是在问如何让EditText的功能就像被禁用一样,但仍允许设置长按监听器,以便可以调用它。

将编辑文本设置为“不可聚焦”,并将输入类型设置为“无”。输入类型为无将使光标在点击时不会出现,因此看起来比仅将可聚焦性设置为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);

希望这能帮助到那些试图做类似事情的人。


0
Try this one.

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

你之前说的是长按按钮会启用它的正确操作,还是在按钮点击后执行? - Sethu

-1

使用切换按钮,它将完美适合您的情况 切换按钮


@SFN... 我无法用按钮或切换按钮替换EditText,因为在按钮中用户无法输入文本... - Vinit ...

-1

你尝试过替换吗?

return false;

return true;

你的 onLongClick(View v) 方法怎么样了?

@Colombet Josselyn... 嗯,我试过这个,但它没起作用。 - Vinit ...
@Hardik... 我知道如果按钮被禁用,那么我就什么也做不了。但是我该如何完成这项任务? - Vinit ...
1
@VinitVikash 请尝试使用OnTouchListener,参见我在您的帖子上的评论。 - Hardik

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接