2011-01-24 23 views
15

¿Cómo puedo hacer que se haga clic en una imagen? Lo he intentado de varias maneras, pero sin éxito. Aquí es el último código he intentado (que es se puede hacer clic, pero se pone de error):imagen en la que se puede hacer clic - android

ImageView btnNew = (ImageView) findViewById(R.id.newbutton); 
    btnNew.setOnClickListener(new View.OnClickListener() { 

      @Override 
      public void onClick(View v) { 

      // do stuff 
      } 

     });  

y aquí está la parte de xml:

<ImageView 
    android:src="@drawable/tbnewbutton" 
    android:text="@string/hello" 
    android:layout_width="wrap_content" 
    android:layout_alignParentRight="true" 
    android:id="@+id/newbutton" 
    android:clickable="true" 
    android:onClick="clickImage" 
    android:layout_height="wrap_content" 
    android:layout_alignParentTop="true" /> 

Cuando se ejecuta este código, y haciendo clic en la imagen me sale este error:

01-24 19:14:09.534: ERROR/AndroidRuntime(1461): java.lang.IllegalStateException: Could not find a method clickImage(View) in the activity

Aquí tienes la solución:

El XML:

<ImageButton 
    android:src="@drawable/tbnewbutton" 
    android:text="@string/hello" 
    android:layout_width="wrap_content" 
    android:layout_alignParentRight="true" 
    android:id="@+id/newbutton" 
    android:clickable="true" 
    android:onClick="clickNew" 
    android:layout_height="wrap_content" 
    android:layout_alignParentTop="true" 
    android:background="@null" /> 

El código:

public void clickNew(View v) 
{ 
    Toast.makeText(this, "Show some text on the screen.", Toast.LENGTH_LONG).show(); 
} 

Respuesta

24

Como otro dijo: hacen de este un ImageButton y definir su atributo onclick

<ImageButton 
    android:layout_height="wrap_content" 
    android:layout_width="wrap_content" 
    android:layout_gravity="left" 
    android:onClick="scrollToTop" 
    android:src="@drawable/to_top_button" 
/> 

La imagen se codifica aquí en una resolución de archivos/estirable/to_top_button.png. Si el usuario hace clic en el botón, se llama al método scrollToTop(). Este método debe declararse en la clase que establece el diseño con el ImageButton como su diseño de contenido.

public void scrollToTop(View v) { 
    ... 
} 

Definición del manipulador OnClick este sistema te ahorra un montón de escribir y también evita la necesidad de clases internas anónimas, lo que es beneficioso para el consumo de memoria.

+8

Ok, esta funciona, pero ahora mi imagen está dentro de un botón ... Así que está frenando mi diseño. Para solucionarlo, agregué la línea android: background = "@ null" en el xml y todo funciona perfectamente. – user484146

+0

¿Te importaría marcar esa respuesta como útil? –

+0

El fondo correcto para usar es 'android: background ="? Android: seleccionableItemBackground "'. – thirtythreeforty

3

hace un ImageButton hacer lo que quiera?

El mensaje de error que recibe implica que no tiene un método en su actividad que coincida con su controlador onClick.

Debe tener algo como clickImage(View view) en su actividad con la implementación de manejo de clics.

+0

He intentado con clickImage (Ver vista) pero no funciona, debido a OnClickListner .. Si un botón de imagen es transparente y mostrará la imagen solamente (sin botón), puedo usarlo. – user484146

+0

Ah, si está configurando explícitamente un oyente de clic en onCreate, no debería tener un atributo onClick en su diseño. –

+0

He intentado eliminar android: onClick = "clickImage" del código, y el resultado es que no ocurre nada al hacer clic. – user484146

0

Usted ha fijado el método onclick llamar "clickImage" cuando la imagen se hace clic en el XML, pero no ha creado un método clickImage en su código. No debería necesitar configurar el oyente onclick en absoluto. Simplemente implemente el método desde su XML y debería estar configurado.

Cuestiones relacionadas