gpt4 book ai didi

android - EditText OnKeyListener 不工作

转载 作者:塔克拉玛干 更新时间:2023-11-02 07:53:31 30 4
gpt4 key购买 nike

我知道this/similar question之前有人问过,但给出的解决方案对我不起作用,所以我再次询问。我尝试了该答案中给出的解决方案,但我的 OnKeyListener 仍然从未在某些设备上被调用,尤其是那些具有库存操作系统的设备。当 editText 中没有字符时,我需要检测按下软键盘的 del 键。这是我的代码;

EditText et = (EditText) findViewById(R.id.et);
et.setOnKeyListener(new EditText.OnKeyListener() {

@Override
public boolean onKey(View v, int keyCode, KeyEvent event) {
Log.d("OnKeyListener", keyCode + " character(code) to send");
return false;
}
});

最佳答案

最终通过 TextWatcher 实现此功能解决了我自己的问题。主要障碍是,我需要检测退格键,即使 EditText 中没有字符,或者至少最终用户认为那里没有字符。第一件事情无法实现,但我做到了后者。以下是详细的解决方案。

首先,我总是在我的 editText 中保留一个空格 ' ' 字符。

editText.addTextChangedListener(new TextWatcher() {

@Override
public void onTextChanged(CharSequence cs, int arg1, int arg2, int arg3) {
if(cs.toString().length() == 0)
editText.setText(" ");
}

@Override
public void beforeTextChanged(CharSequence arg0, int arg1, int arg2, int arg3) { }

@Override
public void afterTextChanged(Editable arg0) { }

});

然后我自定义了 EditText 以在每次光标位置更改时通知我。这个目的是通过覆盖 EditTextonSelectionChanged 方法来实现的。我自定义的 EditText 看起来像这样。

public class SelectionEnabledEditText extends EditText {
public SelectionEnabledEditText(Context context) {
super(context);
}

public SelectionEnabledEditText(Context context, AttributeSet attrs) {
super(context, attrs);
}

public SelectionEnabledEditText(Context context, AttributeSet attrs, int defStyle) {
super(context, attrs, defStyle);
}

@Override
protected void onSelectionChanged(int selStart, int selEnd) {
super.onSelectionChanged(selStart, selEnd);

if(onSelectionChangeListener != null)
onSelectionChangeListener.onSelectionChanged(selStart, selEnd);
}

public static interface OnSelectionChangeListener{
public void onSelectionChanged(int selStart, int selEnd);
}

private OnSelectionChangeListener onSelectionChangeListener;

public void setOnSelectionChangeListener(OnSelectionChangeListener onSelectionChangeListener) {
this.onSelectionChangeListener = onSelectionChangeListener;
}
}

最后,在我的 Activity 中,我正在监听光标位置更改事件并在 editText 中重置我的光标位置,如果它在必要的空间字符开始处,即在第 0 个索引处,就像这样;

editText.setOnSelectionChangeListener(new SelectionEnabledEditText.OnSelectionChangeListener() {
@Override
public void onSelectionChanged(int selStart, int selEnd) {
if (selEnd == 0) {
if (editText.getText().toString().length() == 0)
editText.setText(" ");

editText.setSelection(1);
}
}
});

希望这对类似情况有所帮助。欢迎提出改进/优化建议。

关于android - EditText OnKeyListener 不工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24425838/

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