我有一个非触摸Android系统,带有物理键盘按钮。我想在EditText中检测长按键。
我尝试在MainActivity中使用onKeyDown(开始跟踪)和onKeyLongPress,但它不起作用,因为焦点在于EditText。
P.S:我在片段而不是MainActivity中使用此EditText
答案 0 :(得分:0)
试试这个。
editText.setOnKeyListener(new OnKeyListener() {
public boolean onKey(View v, int keyCode, KeyEvent event) {
Log.i("KEY", Integer.toString(keyCode));
return false;
} });
答案 1 :(得分:0)
由于我想在片段而不是MainActivity中使用它,因此我可以自由地使用MainActivity中的onKeyDown和onKeyLongPress,我找到的唯一解决方案是在自定义类中扩展EditText并覆盖OnKeyUp和OnKeyLongPress方法,在我想要的片段中使用它
public class CustomEditText extends EditText {
public CustomEditText(Context context) {
super(context);
init();
}
public CustomEditText(Context context, AttributeSet attrs) {
super(context, attrs);
init();
}
public CustomEditText(Context context, AttributeSet attrs, int defStyle) {
super(context, attrs, defStyle);
init();
}
private void init() {
}
@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
if(keyCode >= 7 && keyCode <= 16) {
event.startTracking();
return true;
}
return super.onKeyDown(keyCode, event);
}
@Override
public boolean onKeyLongPress(int keyCode, KeyEvent event) {
if(keyCode >= 7 && keyCode <= 16) {
Log.v("Testing", "Long Key Press");
return true;
}
return super.onKeyLongPress(keyCode, event);
}
@Override
public boolean onKeyUp(int keyCode, KeyEvent event) {
return super.onKeyUp(keyCode, event);
}
}
然后我们需要使用这个Custom EditText文本框代替XML中的常规EditText
<com.project.example.util.CustomEditText
android:id="@+id/et"
android:layout_width="match_parent"
android:layout_height="wrap_content"
</com.project.example.util.CustomEditText>