长按时启用 EditText(或按钮)

Posted

技术标签:

【中文标题】长按时启用 EditText(或按钮)【英文标题】:Enable EditText(or button) on Long pressed 【发布时间】:2014-05-06 11:13:24 【问题描述】:

在我的应用程序中 EditText 是禁用的,我想在此编辑文本上实现长按选项(在禁用模式下),启用它并允许从软键输入字符。

例子:-

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

代码:-

<EditText
        android:id="@+id/eTextBillNoFrmReturn"
        android:layout_
        android:layout_
        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 时长按不起作用。

【问题讨论】:

我认为 OnTouchListner 应该可以看到这里***.com/questions/10853117/… 你有解决办法吗? @Hardik ...不,我没有得到解决方案..您在此处提供的链接是按钮的问题。但就我而言,它是 EditText。如果我将更改 editText 的背景使其看起来像禁用,那么那时用户也可以输入文本。 我想告诉你 Tal Kanel 答案不被接受,只是检查一下 【参考方案1】:
Try this one.

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

【讨论】:

其实你在执行长按按钮之前所说的会启用它的仪式或者它会在btn点击之后执行???【参考方案2】:

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

OP 正在寻求一种方法,使 EditText 功能就像它被禁用一样,但仍然允许设置一个可以被调用的长按侦听器。

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

在 XML 中执行此操作:

<EditText
    android:id="@+id/txtYourEditTextID"
    android:layout_
    android:layout_
    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);

希望这会帮助正在尝试做类似事情的人。

【讨论】:

【参考方案3】:

你有没有尝试替换

return false;

通过

return true;

在您的onLongClick(View v) 方法上?

【讨论】:

@Colombet Josselyn... 是的,我试过了,但它不起作用。 @Hardik ...我知道如果按钮被禁用,那么我什么也做不了。但是我是如何完成这项任务的。 @VinitVikash 试试 OnTouchListener 看看我对你帖子的评论【参考方案4】:

使用最适合您的情况的切换按钮 Toggle Button

【讨论】:

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

以上是关于长按时启用 EditText(或按钮)的主要内容,如果未能解决你的问题,请参考以下文章

android自定义edittext 当有文字时怎么禁止长按全选事件

如何更改按钮的边框颜色并更改editText中下划线的颜色?

我想在长按时删除 ListView 上的项目

对话框中 Spinner 和 EditText 不为空时启用按钮

Android EditText:仅启用滚动但停止点击

当用户在移动设备上长按时如何在 div 或输入字段中选择完整的文本