onClick不会在ImageView上触发

问题描述:

我在应用程序中有3-4个活动,并且它们都有一些很好的事件侦听器。 但是只有在一项活动中,我根本无法让事件处理工作。 我试过这个线程的解决方案:http://www.anddev.org/view-layout-resource-problems-f27/ontouch-not-called-t16578.html 它不适合我。我尝试从Java代码手动为ImageViews设置OnClickListeners,从XML中android:onClick。onClick不会在ImageView上触发

似乎有些其他组件处理所有事件,或者我的活动没有处理事件的权限。 我应该为AndroidMainfest.xml中的某些内容添加用于启用处理事件的活动吗?

希望有人有这个想法我应该怎么尝试,下面的代码:

活动:

package com.renegade.begining; 

import android.app.Activity; 
import android.graphics.Bitmap; 
import android.graphics.BitmapFactory; 
import android.os.Bundle; 

import android.view.MotionEvent; 
import android.view.View; 
import android.widget.ImageView; 


public class NotesOnStaff extends Activity{ 
    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 


     setContentView(R.layout.notes_on_staff); 


    /*  NoteView2 note=(NoteView2)findViewById(R.id.note_red); 


     Bitmap bm=BitmapFactory.decodeResource(getResources(), R.drawable.note_red); 
     note.setImage(bm); 
    */ 



    } 


    public void onClickEventBtn1(View v) { 
     // TODO Auto-generated method stub 
     ImageView keyboard_letter=(ImageView)findViewById(R.id.keyboard_letters); 
     keyboard_letter.setVisibility(View.INVISIBLE); 
    } 

    public void onClickEventBtn2(View v) { 
     // TODO Auto-generated method stub 
     ImageView keyboard_letter=(ImageView)findViewById(R.id.keyboard_letters); 
     keyboard_letter.setVisibility(View.VISIBLE); 
    } 

    @Override 
    public boolean onTouchEvent(MotionEvent event) { 
     switch (event.getAction()) { 
     case MotionEvent.ACTION_DOWN: 
     ImageView keyboard_letter=(ImageView)findViewById(R.id.keyboard_letters); 
      keyboard_letter.setVisibility(View.VISIBLE); 
     return true; 
     case MotionEvent.ACTION_UP: 
     return false; // something else 
       default: 
         return false;// all others 
     } 
    } 


} 

布局:

<?xml version="1.0" encoding="utf-8"?> 
<RelativeLayout 
    xmlns:android="http://schemas.android.com/apk/res/android" 
    android:id="@+id/notes_on_staff_layout" 
    android:background="@drawable/background_ver" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent"> 


      <ImageView 
       android:id="@+id/notes_keyboard" 
      android:src="@drawable/keyboard" 
      android:layout_height="wrap_content" 
      android:layout_width="wrap_content" 
      android:layout_alignParentBottom="true" 
      android:layout_centerHorizontal="true" 
      android:layout_marginBottom="20dip" 

     android:clickable="true" android:focusable="true"/> 

     <ImageView 
      android:id="@+id/btn_hide" 
      android:src="@drawable/btnhide" 
      android:layout_alignParentLeft="true" 
      android:layout_marginTop="40dip" 
      android:layout_marginLeft="10dip" 
      android:layout_height="wrap_content" 
      android:layout_width="wrap_content" 
      android:onClick="onClickEventBtn1" 
     android:clickable="true" android:focusable="true"/> 

     <ImageView 
     android:id="@+id/btn_show" 
      android:layout_alignBottom="@id/btn_hide" 
      android:layout_toRightOf="@id/btn_hide" 
     android:src="@drawable/btnshow" 
     android:layout_height="wrap_content" 
     android:layout_width="wrap_content" 
     android:onClick="onClickEventBtn2" 
      android:clickable="true" android:focusable="true"/> 



     <ImageView 

      android:id="@+id/staff" 
      android:src="@drawable/staff" 
      android:layout_below="@id/btn_hide" 
      android:layout_height="wrap_content" 
      android:layout_width="wrap_content" 
      android:layout_centerHorizontal="true" 
      android:layout_marginTop="0dip" 
      android:layout_above="@id/notes_keyboard" 


     /> 


     <com.renegade.begining.NoteView2 
     android:id="@+id/note_red" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 


      />  


     <ImageView 
     android:id="@+id/keyboard_letters" 
      android:layout_alignLeft="@+id/notes_keyboard" 
      android:layout_alignBottom="@+id/notes_keyboard" 
      android:layout_marginBottom="10dip" 
      android:visibility="invisible" 
     android:src="@drawable/keyboard_letters" 
     android:layout_height="wrap_content" 
     android:layout_width="wrap_content" 
      android:clickable="true" android:focusable="true"/> 


</RelativeLayout> 

你的事件监听是吸收所有DOWN事件。尝试让它返回false而不是真正的,所以子视图也有机会作出反应,因为我认为onClick正确触发子视图需要注册一个连续的DOWN然后UP(只是一个UP是不够的;想想滑动你的手指从一个按钮到另一个按钮然后释放;既不是这意味着用户想取消指示)。

+0

Thx for reply。 我明白你的观点,但问题在于我的活动根本没有注册点击和触摸事件。它永远不会进入onTouch()和onClick()函数(我在调试模式下进行检查)。 我不需要Activity.onTouch(),我只是想检查事件是否在那里处理。而事实并非如此。 – 2010-08-06 01:42:19

+0

您的keyboard_letters视图不可见,但可点击;它似乎有可能重叠您的按钮并防止点击发射。尝试删除它和触摸事件处理程序,看看你的按钮是否触发? 我唯一能想到的其他事情是,NoteView2没有提供源代码,它可能会不恰当地设置其可触摸区域并阻止其他视图获得焦点。 (更一般地,试着从两个按钮和两个按钮点击监听器的最小布局和活动开始,一次添加一个视图/方法,直到找到罪魁祸首)。 – 2010-08-06 15:36:31

+0

Thx再一次为您提供帮助。我将从头开始构建布局,并在此处发布结果。 – 2010-08-07 11:02:24