2011-01-24 6 views
15

Comment rendre une image cliquable? J'ai essayé certains moyens, mais sans succès. est ici le dernier code j'ai essayé (il est cliquable, mais obtient une erreur):Image cliquable - android

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

      @Override 
      public void onClick(View v) { 

      // do stuff 
      } 

     });  

et voici la partie 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" /> 

Lors de l'exécution de ce code, et en cliquant sur l'image que je reçois cette erreur:

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

VOICI LA SOLUTION:

Le 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" /> 

Le code:

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

Répondre

24

Comme autre dit: en font un ImageButton et définir son onClick attribut

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

L'image est ici codée dans une résolution de fichier/drawable/to_top_button.png. Si l'utilisateur clique sur le bouton, la méthode scrollToTop() est appelée. Cette méthode doit être déclarée dans la classe qui définit la mise en page avec le ImageButton comme disposition de contenu.

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

Définition du gestionnaire OnClick cette façon vous permet d'économiser beaucoup de frappe et empêche également la nécessité de classes internes anonymes, ce qui est bénéfique pour l'empreinte mémoire.

+8

Ok, celui-ci fonctionne, mais maintenant mon image est à l'intérieur d'un bouton .. Donc, il freine ma mise en page. Pour résoudre ce problème, j'ai ajouté la ligne android: background = "@ null" dans le fichier XML et tout fonctionne parfaitement! – user484146

+0

Souhaitez-vous alors marquer cette réponse comme utile? –

+0

L'arrière-plan correct à utiliser est 'android: background ="? Android: selectableItemBackground "'. – thirtythreeforty

3

Est-ce une ImageButton faire ce que vous voulez? Le message d'erreur que vous obtenez implique que vous n'avez pas une méthode dans votre activité qui correspond à votre gestionnaire onClick.

Vous devriez avoir quelque chose comme clickImage(View view) dans votre activité avec l'implémentation de gestion des clics.

+0

J'ai essayé avec clickImage (vue de vue) mais ne fonctionne pas, cause de OnClickListner. Si un bouton d'image est transparent et montrera l'image seulement (aucun bouton), je peux l'employer. – user484146

+0

Oh, si vous définissez explicitement un écouteur on click dans onCreate, vous ne devriez pas avoir un attribut onClick dans votre mise en page. –

+0

J'ai essayé de supprimer android: onClick = "clickImage" du code, et le résultat est que rien ne se passe en cliquant sur. – user484146

0

Vous avez défini la méthode onclick appeler "clickImage" lorsque l'image est cliqué dans votre XML, mais vous n'avez pas créé de méthode clickImage dans votre code. Vous ne devriez pas avoir besoin de définir l'écouteur onclick du tout. Implémentez simplement la méthode à partir de votre XML et vous devriez être défini.