忽略EditText setOnClickListener代码以便能够编辑文本

时间:2014-04-10 20:40:16

标签: java android onclicklistener

我有一个EditText作为文本字段,可以在活动的其他个人详细信息中接受电话号码。

在活动启动时,EditText将被禁用,直到用户选择编辑以编辑信息。然后启用它并允许用户在其中键入数字。

用户单击以保存数据后,使用

使EditText无法对焦
txtPhone.setFocusable(false);

然后使用onClickListener允许用户单击它并调用它包含的数字。

当用户点击编辑编辑号码时,我正在设置

txtPhone.setFocusable(true);

要允许EditText接收焦点,但它似乎仍然使用onClickListener并且不允许编辑文本,在log cat中发出警告:

TextView does not support text selection. Action mode canceled.

EditText侦听器的代码:

txtPhone.setOnClickListener(new View.OnClickListener()
    {   
        @Override
        public void onClick(View v)
        {
            if(txtPhone.isFocusable()==false)
            {
                if(txtPhone.getText().length() > 1)
                {
                    // Call number
                    // Using Toast to show listeners working first          
                    Toast.makeText(getApplicationContext(), "Calling... " + txtPhone.getText().toString(), Toast.LENGTH_LONG).show();
                }
            }
        }
    });

EditText xml:

<EditText
     android:id="@+id/txtPhone"
     android:layout_width="match_parent"
     android:layout_height="wrap_content"
     android:ems="10"
     android:enabled="false"
     android:hint="Telephone..."
     android:inputType="phone"
     android:maxLength="11" />

我怎样才能使文本像第一次启动时一样可编辑而忽略听众,但是当不可聚焦时拨打该号码,我似乎无法按需要使其工作

1 个答案:

答案 0 :(得分:1)

我无法重现您收到的警告,但是在没有聚焦时按下文本框时无法显示Toast。我确实尝试了以下内容来复制你想要实现的目标。希望我能正确理解你。

<强>的EditText

我使用enabled="false"而不是focusable="false"。这将有类似的行为启用为false,但允许onClickListener txtPhone触发。

<EditText
    android:id="@+id/txtPhone"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:ems="10"
    android:focusable="false"
    android:hint="Telephone..."
    android:inputType="phone"
    android:maxLength="11" />

<强>监听

由于您没有显示按钮的代码,因此我使用了一个名为btnEdit的按钮来切换焦点。而不是txtPhone.setFocusable(true);我使用txtPhone.setFocusableInTouchMode(true);来正确地使编辑文本可以编辑。

btnEdit.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View view) {
        if (txtPhone.isFocusable()) {
            txtPhone.setFocusable(false);
        } else {
            txtPhone.setFocusableInTouchMode(true);
        }
    }
});

txtPhone.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View view) {
        if (txtPhone.isFocusable() == false) {
            if (txtPhone.getText().length() > 1) {
                // Call number
                // Using Toast to show listeners working first
                Toast.makeText(MainActivity.this, "Calling... " + txtPhone.getText().toString(), Toast.LENGTH_LONG).show();
            }
        }
    }
});

因此,当我第一次开始活动时,txtPhone不可编辑。当我点击编辑按钮时,txtPhone变得可编辑,我可以输入数字。最后,我再次点击编辑按钮以禁用txtPhone,当我按下它时,会出现Toast。