2011-05-07 13 views
15

Tengo un formulario. 7 Editar texto en diseño vertical. En la pantalla en un momento solo puede ver 3 EditText (el formulario es grande, así que necesito desplazarme hacia arriba y hacia abajo para completar todos los archivos). En la parte inferior - Botón.El botón Android necesita dos clics para la acción

Cuando relleno top EditText (o uno de arriba, que es invisible cuando me desplacé hacia abajo), y focus (cursor) en este EditText, cuando me desplazo hacia abajo e intento hacer clic en Button una vez, no pasa nada. cuando hago clic nuevamente, ocurre la acción del botón.

Cuando ambos EditText con foco y botón están visibles: el botón necesita un clic.

Creo que en el primer caso, el primer clic solo se enfoca. Y el segundo clic es clic en "real".

¿Cómo puedo solucionarlo? Solo necesito un clic en el botón. Gracias

+0

¿Cómo se puede repetir: proyecto vacío Creta con la actividad por defecto, usar la disposición http://pastebin.ca/2054854 Iniciar proj el dispositivo real - escribir el texto arriba EditarTexto, se desplaza hacia abajo a Button y haga clic en el botón. – newmindcore

Respuesta

20

La pregunta es antigua y no sé si esto solucionará su problema, ya que su enlace pastebin ya no funciona, pero como me encontré con su publicación con el mismo problema y encontré una solución lo haré publicar de todos modos:

En mi caso, el problema ocurrió cuando solicité un estilo personalizado a un botón tras un 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> 

el problema era la siguiente línea:

<item name="android:focusableInTouchMode">true</item> 

Una vez que lo quité, el botón funcionó como se esperaba.

Espero que esto ayude.

+0

¡Gracias! Me lo arregló – locke

+0

Ese "focusableInTouchMode" publicado erróneamente en un antiguo tutorial ha sido copiado y pegado en innumerables aplicaciones de Android cargadas de errores. –

10

He utilizado lo siguiente para resolver un problema similar. Que encaje de forma automática en el elemento de nuevo si el primer clic sólo se pone centrarse:

input.setOnFocusChangeListener(new View.OnFocusChangeListener() { 
      public void onFocusChange(View v, boolean hasFocus) { 
       if (hasFocus) { 
        v.performClick(); 
       } 
      } 
     }); 

que necesitaba focusableInTouchMode para ser verdad.

+0

¿No es esto una revisión? La respuesta aceptada no funcionó para usted? – Rajkiran

+0

salvaste mi vida amigo :) – iBabur

+0

@Rajkiran si es necesario que necesites tener android: focusableInTouchMode = "true" entonces esta solución es perfecta, en mi caso era must have focusableInTouchMode a true – iBabur

1

Parecido a la respuesta de Maves. Esto hizo el truco para mí:

<Button 
    style="@android:style/Widget.EditText" 
    android:focusableInTouchMode="false" 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content"/> 
0

Vieja pregunta que sé. De todos modos, tuve el mismo problema y necesitaba que el botón fuera enfocable.
Al final usé un 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;     
    } 
}); 
Cuestiones relacionadas