启用已禁用的EditText的复制并解释Android EditText的奇怪行为

3

我的问题是: 是否可以从已禁用的editText启用复制文本功能?

我尝试了以下代码来测试在Android 4.4.2(三星Galaxy Note II)上的行为:

EditText _edit;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_fragment_test);

    _edit = (EditText) findViewById(R.id.editDisabled);
    _edit.setText("Text to be copied...");
    _edit.setEnabled(false);

    /* update code with answer below */
    _edit.setInputType(InputType.TYPE_NULL);
    _edit.setTextIsSelectable(true);
    /* end mod */


    Toast.makeText(getApplicationContext(), "onClick enabled: " + (_edit.isClickable() ? true : false) + 
                                        " \n onLongClick enabled: " +  (_edit.isLongClickable() ? true : false) , Toast.LENGTH_LONG).show();


    _edit.setOnLongClickListener(new OnLongClickListener() {
        @Override
        public boolean onLongClick(View paramView) {
            Toast.makeText(getApplicationContext(), "onLongClick()!!!", Toast.LENGTH_LONG).show();
            return false;
        }
    });

    _edit.setOnClickListener(new OnClickListener() {
        @Override
        public void onClick(View paramView) {
            Toast.makeText(getApplicationContext(), "onclick()!!", Toast.LENGTH_LONG).show();

        }
    });
}

当活动打开时,Toast会在onClick()和onLongClick()事件中显示true/true。但是,如果我尝试在禁用的editText上单击或长按,则不会触发任何事件。
那么,有谁能回答我的问题或解释禁用的editText的奇怪行为吗?
提前感谢你。

这不是重复的问题,我正在尝试启用editText中的复制功能,而不是像那个帖子中指出的那样禁用它,请在回答之前仔细阅读问题。 - shaolin
2个回答

2
这不是奇怪的行为。禁用视图意味着禁止用户交互,无论视图是否可(长时间)点击。
您可以像Paul Chernenko所回答的那样,禁用输入并保留文本可选。用户交互也将可能(单击和长按)。
在您的情况下,我假设您从EditText的禁用状态中缺少的唯一事物是禁用外观。这可以通过自定义EditText样式来实现,这将是另一个问题。

奇怪的行为来自于isClickable()测试,然后我无法触发onClick事件...但也许这是我的个人意见。正如你所指出的,我能做的最好的就是为editText设置一个自定义样式,我想我没有其他的解决方案了...那么如何为这样的editText设置样式,使其看起来像一个禁用的控件,同时保留复制功能呢? - shaolin
1
你可以解释那种"奇怪"的行为,比如说"视图是可点击的,但如果启用了就不行"。启用属性在可点击属性之上,并具有优先级。很高兴能帮助你。 - kresa

1
尝试将其添加到 XML 中。
 android:inputType="none"
 android:textIsSelectable="true"

而且不要禁用EditText


尝试过了,但是没有任何变化。我将使用这段代码更新问题。谢谢!...我需要禁用editText,这是我的问题... - shaolin
@vince46 但是在该位置也无法输入任何内容,您可以创建一些监听器来防止将任何内容粘贴到您的EditText中。 - Paul Chernenko
  • 我需要禁用editText,因为我已经在之前放置了一些内容,现在在其他事件后,我使用代码显示它。
  • 我需要将editText显示为禁用状态以满足样式要求,并且不允许用户更改内容。
  • 用户需要复制editText的内容以供其他用途。
- shaolin

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