2011-01-20 27 views
28

Duplicar posible:
Android. How do I keep a button displayed as PRESSED until the action created by that button is finished?¿Cómo puedo mantener un botón presionado después de hacer clic en él?

tengo un botón y que quiero cuando lo presioné para quedarse como prensado (con el color verde en Froyo) .. Cualquier ayuda ??

mycodes_Button = (Button) findViewById(R.id.mycodes); 
... 
if (saved_Button.isPressed()) 
{ 
    saved_Button.setFocusable(true); 
} 

Algo como esto?

+0

¿Puede usted decirnos, qué problema tuvo este código? –

+0

Después de hacer clic en el botón, no se queda como está presionado (me refiero con el color verde), vuelve al estado original, gris. – Nikitas

Respuesta

33

Hola utilizar el siguiente comando, útiles,

mycodes_Button.setOnTouchListener(new OnTouchListener() { 

      @Override 
      public boolean onTouch(View v, MotionEvent event) { 
       mycodes_Button.setPressed(true); 
       return true; 
      } 
     }); 
+13

Esto funciona básicamente, pero debe mencionar que pierde la funcionalidad de botón normal.Como devuelve 'verdadero' aquí, las cosas' onClick' nunca se ejecutan. Así que, en realidad, tienes que activar las cosas, quieres que el botón funcione desde este método 'onTouch'. Por cierto: debes usar 'v.setPressed (true)'. – Ridcully

+0

no es necesario manejar cosas 'onClick' por separado ahora. simplemente use 'v.performClick();' en 'onTouch' –

+0

Hay un pequeño problema con esto. Creo que cuando la actividad está en pausa, los botones quedan sin presionar. Es un fastidio para mí porque despliego un diálogo de progreso y también navego a otras actividades y espero que los botones se mantengan presionados en estas situaciones. –

4

¿A ToggleButton se adaptan a sus necesidades?

A juzgar por sus comentarios, parece que no conoce el Touch Mode. En este modo, que es el predeterminado para la mayoría de las cosas, no hay foco (que es lo que está tratando de lograr) y no artículos seleccionados

Puede intentar salir del modo táctil programáticamente, pero no lo recomendaría. Después de un pequeño período de acostumbrarse, el modo táctil brindará una experiencia mucho mejor a los usuarios.

+0

Después de hacer clic en el botón, no permanece como está presionado (me refiero con color verde), vuelve al estado original, gris. Necesito el botón normal y no un ToggleButton .. gracias por sus respuestas! – Nikitas

+0

En realidad necesito kostas de botón normal ... Gracias por su respuesta (ευχαριστώ για την απάντηση!) – Nikitas

+0

Un botón normal no puede permanecer en estado comprimido, solo puede permanecer en estado enfocado. – kgiannakakis

40

tuve este problema con un botón con un fondo personalizado, y terminó con el selected state para esto. Ese estado está disponible para todas las vistas.

Para utilizar este tiene que definir un fondo botón personalizado como state list:

<selector xmlns:android="http://schemas.android.com/apk/res/android"> 
    <item android:state_selected="false" android:state_focused="false" 
    android:state_pressed="false"><bitmap ... /></item> 
    <item android:state_selected="true"><bitmap ... /></item> 
    <item android:state_focused="true"><bitmap ... /></item> 
    <item android:state_pressed="true"><bitmap ... /></item> 
</selector> 

Luego de usar este contexto, digamos que está en /res/drawable/button_bg.xml en su archivo de diseño, que utilice:

... 
<Button android:background="@drawable/button_bg" ... /> 
... 

en su código puede cambiar al estado seleccionado (des) en su onClick oyente:

myButton.setOnClickListener(new View.OnClickListener() { 
    @Override 
    public void onClick(View v) { 
    v.setSelected(true); 
    // normal click action here 
    } 
}); 

El activated state coincide mejor con el significado previsto, pero solo está disponible desde Android 3.xy versiones posteriores.

+0

El método isActivated() solo está disponible desde el nivel 11 de API y superior. No recomiendo usar esto por razones de comparabilidad con la versión anterior del sistema operativo de Android. El nivel 11 de API es igual a Android 3.x que nadie está usando en sus teléfonos. – philipp

+0

@phlipp tiene razón, me di cuenta de esto en las pruebas (después de escribir esta respuesta) y cambié a seleccionado, pero olvidé actualizar mi respuesta. – beetstra

+2

Gracias Beetstra. Noté un defecto en la solución 'presionada', así que usé la tuya. Más fácil e impecable hasta ahora. –

Cuestiones relacionadas