在EditText中,点击特定的文本子集时弹出一个对话框

找到两种解决方案 - 请参阅选定的答案

当用户点击EditText的某个区域时,我想弹出一个对话框。 我用onClick捕获点击。 这部分工作:用户第一次点击EditText时,弹出软键盘,而对话框没有。 随后的水龙头弹出键盘,然后弹出对话框(和键盘消失)。

我怀疑这与EditText获得焦点有关。

这是一个代码片段:

public class PrefixEditText extends EditText implements TextWatcher, OnClickListener
{
  public PrefixEditText (Context context)
  {
    super (context);
    setOnClickListener (this);
  }

  @Override
  public void onClick(View v)
  {
    int selStart = getSelectionStart();
    if (selStart < some_particular_pos)
      bring_up_dialog();
  }
}

重要提示:我不想完全禁用正常的EditText行为。 我希望用户能够进行区域选择(复制和粘贴)。 我可能仍然希望它获得焦点(所以我不打破具有物理键盘的人使用该应用程序的模型)。 点击可以设置光标位置。 因此,覆盖onTouch并从EditText阻止所有onTouch操作的解决方案对我而言不起作用。

更新我发现了更多。 如果EditText获得焦点,onFocusChange被调用,onClick不会。 如果它已经有焦点,onClick会被调用,而onFocusChange则不会。

其次,通过调用可以隐藏键盘

setInputType (InputType.TYPE_NULL);

在onFocusChange中这样做 - 键盘从不显示。 在onClick中这样做(假设键盘在点击之前隐藏)显然为时已晚 - 键盘显示然后消失。

下一个尝试的想法是在onTouch期间隐藏键盘。 不过,我害怕捣乱那些代码 - 看起来无论我怎么看都会对未来版本的EditText非常脆弱。

尽管如此?


可能是这可以工作

 EditText e = new EditText(context);
    e.setOnFocusChangeListener(new OnFocusChangeListener() {

        public void onFocusChange(View v, boolean hasFocus) {
            // TODO Auto-generated method stub
        if(hasFocus)
        {
            //dialogue popup
        }
        }
    });

或者你可以使用e.hasFocus(); 然后使用e.setFocusable(false); 让它变得毫无聚焦

///////////////我的代码

e.setInputType(InputType.TYPE_NULL);

e.setOnClickListener(new OnClickListener() {

    public void onClick(View v) {
        // TODO Auto-generated method stub
        AlertDialog.Builder sa = new Builder(ctx);
        sa.create().setOnDismissListener(new OnDismissListener() {

            public void onDismiss(DialogInterface dialog) {
                // TODO Auto-generated method stub
                e.setInputType(InputType.TYPE_CLASS_TEXT);
            }
        });
        sa.show();
    }
});

尝试通过onClick更改捕获点击到onTouch

    this.editText.setOnTouchListener(new OnTouchListener() {

        @Override
        public boolean onTouch(View v, MotionEvent event) {
            if (event.getAction() == MotionEvent.ACTION_DOWN) {
                                //dialogue popup
            }
            return false;
        }
    });

尝试这个,如果它可以帮助u.first第一次edittext将表现为一个正常的editttext和条件你可以根据需要显示对话框

 EditText editText;
mTim_edittext.setOnFocusChangeListener(new OnFocusChangeListener() {

      public void onFocusChange(View v, boolean hasFocus) {

     if(!hasFocus){

    //statement


 if(condition){

AlertDialog diaBox = Utils.showErrorDialogBox(  "Term in Months Cannot be 0", context);                             
diaBox.show();
              }


            }
        }
    });
链接地址: http://www.djcxy.com/p/24207.html

上一篇: In EditText, popup a dialog when clicking on specific subset of text

下一篇: findViewById returns null for EditText