I have a form. 7 EditText in vertical layout. On screen in one moment can see only 3 EditText (form is big so I need to scroll up and down to fill all fields). In bottom - Button.
When I fill top EditText (or one of top, which is invisible when I scrolled down to button), and focus (cursor) in this EditText, when I scrolled down and try to click Button once - nothing happens. when I click again - happens button action.
When both EditText with focus and Button is visible - Button needs one clicks.
I think that in first case first click just takes focus. And second click is "real" click.
How I can fix it? I need only one click on Button.
The question is old and I don't know whether this will solve your problem, since your pastebin link doesn't work anymore, but since I stumbled upon your post with the same problem and I found a solution I will post it anyway:
In my case the problem occured when I applied a custom style to a button following a tutorial:
<style name="ButtonStyle" parent="@android:style/Widget.Holo.Button">
<item name="android:focusable">true</item>
<item name="android:focusableInTouchMode">true</item>
<item name="android:clickable">true</item>
<item name="android:background">@drawable/custom_button</item>
<item name="android:textColor">@color/somecolor</item>
<item name="android:gravity">center</item>
</style>
The problem was the following line:
<item name="android:focusableInTouchMode">true</item>
Once I removed it the button worked as expected.
Hope this helps.
I used the following to solve a similar problem. It automatically clicks on the item again if the first click only gets focus:
input.setOnFocusChangeListener(new View.OnFocusChangeListener() {
public void onFocusChange(View v, boolean hasFocus) {
if (hasFocus) {
v.performClick();
}
}
});
I needed focusableInTouchMode to be true.
Similar to Maves answer. This did the trick for me:
<Button
style="@android:style/Widget.EditText"
android:focusableInTouchMode="false"
android:layout_width="match_parent"
android:layout_height="wrap_content"/>
Old question I know. Anyways I had the same problem and needed the button to be focusable.
In the end I did use an OnTouchListener.
myButton.setOnTouchListener(new View.OnTouchListener() {
@Override
public boolean onTouch(View view, MotionEvent motionEvent) {
int action = motionEvent.getAction();
if (action == MotionEvent.ACTION_DOWN) {
// do your stuff on down here
} else if (action == MotionEvent.ACTION_UP) {
// do your stuff on up here
}
// if you return true then the event is not bubbled e.g. if you don't want the control to get focus or other handlers..
return false;
}
});