gpt4 book ai didi

android - 在 EditText 中,单击特定文本子集时弹出对话框

转载 作者:塔克拉玛干 更新时间:2023-11-02 20:51:25 24 4
gpt4 key购买 nike

找到两个解决方案 - 请查看所选答案

当用户点击 EditText 的某个区域时,我想弹出一个对话框。我使用 onClick 来捕获点击。这部分有效:用户第一次点击 EditText 时,会弹出软键盘,但不会弹出对话框。随后的点击会调出键盘,然后是对话框(键盘会消失)。

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

这是一个代码 fragment :

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 的 future 版本来说都是非常脆弱的。

对此有什么想法吗?

最佳答案

这可能行得通

 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();
}
});

关于android - 在 EditText 中,单击特定文本子集时弹出对话框,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14826086/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com