I would like to listen to three different events at the same time on an EditText
- Text changed events
- Touch events
- softKeyboard event
I am using a touch screen with a soft keyboard. Specifically, I would like to log these events to a file for further processing. The problem is that I was not able to listen for all three events simultaneously. Also, I was not able to catch the softkeyboard events at all. When I searched I found that the code I am using for key events works only for hard keyboard but I would like to catch those events from a softkeyboard.
I read several answers in stack overflow but they didn't solve my problem such as
How to combine OnClickListener and OnTouchListener for an ImageButton
touchEvent while typing with soft keyboard android
Receiving onTouch and onClick events with Android
I have been trying to solve this problems for several days but I didn't succeed.I returned false on the touch listener to allow the other listeners to catch the event but that also did not solve the issue. Any help or guidance will be highly appreciated.
phrase.addTextChangedListener(new TextWatcher() {
@Override
public void afterTextChanged(Editable s) {
String formattedDate = df.format(c.getTime());
String[] data = {formattedDate,"Acceleration","","","","","","","","","","","","","", "",
"","","", "", "", "", "","", "", "", "", "", "", "", "","", "", "","", "", "", "", "", "", "", "",
"During",timeStamp+"",Xacc+"",Yacc+"",Zacc+"",};
writeDataToXls(data);
}
@Override
public void beforeTextChanged(CharSequence s, int start,
int count, int after) {
String formattedDate = df.format(c.getTime());
String[] data = {formattedDate,"Acceleration","","","","","","","","","","","","","", "",
"","","", "", "", "", "","", "", "", "", "", "", "", "","", "", "","", "", "", "", "", "", "", "",
"During",timeStamp+"",Xacc+"",Yacc+"",Zacc+"",};
writeDataToXls(data);
}
@Override
public void onTextChanged(CharSequence s, int start,
int before, int count) {
String formattedDate = df.format(c.getTime());
String[] data = {formattedDate,"Acceleration","","","","","","","","","","","","","", "",
"","","", "", "", "", "","", "", "", "", "", "", "", "","", "", "","", "", "", "", "", "", "", "",
"During",timeStamp+"",Xacc+"",Yacc+"",Zacc+"",};
writeDataToXls(data);
}
});
phrase.setOnTouchListener(new View.OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event) {
String formattedDate = df.format(c.getTime());
int action=event.getAction();
int actionIndex=event.getActionIndex();
int actionMasked= event.getActionMasked();
int btnState=event.getButtonState();
long downTime=event.getDownTime();
long eventTime=event.getEventTime();
int EdgeFlags=event.getEdgeFlags();
int Flags= event.getFlags();
int MetaState=event.getMetaState();
float orientation=event.getOrientation();
int pointerCount=event.getPointerCount();
float pressure=event.getPressure();
float size=event.getSize();
int source=event.getSource();
float toolMajor=event.getToolMajor();
float toolMinor=event.getToolMinor();
float touchMajor=event.getTouchMajor();
float touchMinor=event.getTouchMinor();
float xAxis=event.getAxisValue(AXIS_X);
float yAxis=event.getAxisValue(AXIS_Y);
float x=event.getX();
float y=event.getY();
float rawX=event.getRawX();
float rawY=event.getRawY();
float XPrecision=event.getXPrecision();
float YPrecision=event.getYPrecision();
String[] data = {formattedDate,"Touch","","","","","","","","","","","","", "","",
action+"",actionIndex+"",actionMasked+"", btnState+"", downTime+"", eventTime+"",EdgeFlags+"",Flags+"", MetaState+"",
orientation+"",pointerCount+"", pressure+"", size+"", source+"", toolMajor+"",toolMinor+"", touchMajor+"", touchMinor+"",
xAxis+"", yAxis+"", x+"", y+"", rawX+"", rawY+"", XPrecision+"", YPrecision+""
,timeStamp+"",Xacc+"",Yacc+"",Zacc+"",};
writeDataToXls(data);
System.out.println("touch");
return false;
}
});
phrase.setOnKeyListener(new EditText.OnKeyListener()
{
public boolean onKey(View v, int keyCode, KeyEvent event)
{
String formattedDate = df.format(c.getTime());
int action= event.getAction();
int keyCode2=event.getKeyCode();
char dispLabel=event.getDisplayLabel();
long downtime=event.getDownTime();//in ms
long eventTime= event.getEventTime();//in ms
int flags=event.getFlags();
int metaState=event.getMetaState();
int modifiers=event.getModifiers();
int number= event.getNumber();
int repeatCount= event.getRepeatCount();
int scanCode= event.getScanCode();
int source= event.getSource();
int unicodeChar=event.getUnicodeChar();
String[] data = {formattedDate,"Key",action+"",keyCode+"",keyCode2+"",dispLabel+"",downtime+"",eventTime+"",flags+"",metaState+"",modifiers+"",number+"",repeatCount+"",scanCode+"", source+"",unicodeChar+"",
"","","", "", "", "", "","", "", "", "", "", "", "", "","", "", "","", "", "", "", "", "", "", "",
"","","","","","","",""};
writeDataToXls(data);
System.out.println("Key");
return true;
}
});