在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