What I want I have an EditText, where the user can enter a value, such as 10.40. Once the user is done editing I am formatting his input to a currency, for
what is the problem ur getting? need to include setOnFocusChangeListener with ur editfield. just check it. and have to override the onFocusChange.
plz check for that...
hereenter link description here
Try using both View.setFocusableInTouchMode() and View.requestFocus(). You can use the onKeyListener() interface to detect user input and start a timer after each onKey Event to start your edit after reasonable delay.
Yes there is definitely an issue with edit text not losing the focus once it gains. After quite a bit of googling I found that its possible to achieve the desired result by only workaround.
I had a similar requirement and I made a workaround to accomplish the above task and it works great for me.
The workaround is as follows:
Set the onClickListener for the editText and in the onClick event set a flag saying the editText was clicked.
Set the onKeyListener for the editText and get the current value of the editText in the onKey event.
Now, say you have clicked Done / Back Button in your activity/dialog. Here you can check the flags that got set when the editText was clicked. So if its true make any procedure calls you want.
EditText v = (EditText) layout.findViewById(R.id.framerate);
v.setOnClickListener(new OnClickListener() {
public void onClick(View v) {
Log.d(ExploreUIActivity.TAG, "Insided onClick");
vClicked= true;
}
});
v.setOnKeyListener(new OnKeyListener() {
public boolean onKey(View v, int keyCode, KeyEvent event) {
Log.d(ExploreUIActivity.TAG, "Inside onKeyListener");
value = ((EditText) v).getText().toString();
return false;
}
});
Now for the back/done button set the onClickListener and check whether the flag was set or not
back.setOnClickListener(new OnClickListener() {
public onClick(View v) {
//check the flag
//if set do some stuff
});
I did some research and amongst other things I found this thread. It elaborates upon a similar issue that you're having (of the button not gaining focus). Try the following: On your buttons, set setFocusable(true) (NOT setFocusableInTouchMode! As this spawns the annoying behaviour you stated in your OP), then set the following OnClickListener on your Buttons:
return new View.OnClickListener() {
@Override
public void onClick(View v) {
// TODO workaround because of android issue nr. 2705
button.requestFocusFromTouch();
// Do some stuff to handle OnClick
}
};
But they should probably just fix the focus stuff for buttons, the current behaviour really does cause some issues (like yours).