2010-08-22 4 views
3

C'est exaspérant. J'ai la mise en page XML suivant:EditText ne capture pas les flops de ViewFlipper?

<FrameLayout android:layout_width="fill_parent" android:layout_height="wrap_content" android:background="@drawable/shadow" android:focusable="true" android:focusableInTouchMode="true"> 
    <ViewFlipper android:id="@+id/flipper" android:layout_width="fill_parent" android:layout_height="fill_parent"> 
     <EditText android:id="@+id/reviews" style="@style/DescriptionArea" android:layout_width="fill_parent" android:layout_height="wrap_content" android:enabled="false" android:background="@null" /> 
    <EditText android:id="@+id/notes" style="@style/DescriptionArea" android:hint="@string/detail_hint" android:layout_width="fill_parent" android:layout_height="wrap_content" android:enabled="false" android:maxLines="4"/> 
    </ViewFlipper> 
</FrameLayout> 

Et Java:

viewFlipper = (ViewFlipper)findViewById(R.id.flipper); 
    slideLeftIn = AnimationUtils.loadAnimation(this, R.anim.slide_left_in); 
    slideLeftOut = AnimationUtils.loadAnimation(this, R.anim.slide_left_out); 
    slideRightIn = AnimationUtils.loadAnimation(this, R.anim.slide_right_in); 
    slideRightOut = AnimationUtils.loadAnimation(this, R.anim.slide_right_out); 

    gestureDetector = new GestureDetector(new MyGestureDetector()); 
    gestureListener = new View.OnTouchListener() { 
     public boolean onTouch(View v, MotionEvent event) { 
      if (gestureDetector.onTouchEvent(event)) { 
       return true; 
      } 
      return false; 
     } 
    }; 

Il semble que si je tente de jeter au-dessus de la zone EditText, le geste n'enregistre pas. Cependant, si je lance autour de il, c'est l'arrière-plan de l'EditText, cela fonctionne. J'ai essayé de suivre les hauteurs et les largeurs de fill_parent/wrap_content, mais cela ne semble pas changer quoi que ce soit. J'ai confirmé ce soupçon en rendant rouge l'arrière-plan EditText, et en notant que rien dans ce rectangle rouge ne peut activer une aventure. Alors, comment puis-je faire ce travail?

Répondre

5

Vous pouvez remplacer la méthode dispatchTouchEvent d'activité:

@Override 
public boolean dispatchTouchEvent(MotionEvent ev) { 
    if (gestureDetector != null) { 
     gestureDetector.onTouchEvent(ev); 
    } 
    return super.dispatchTouchEvent(ev); 
} 

De toute évidence gestureDetector est une variable de membre, vous devez déclarer et initialiser votre activité.

+0

est terrible! Je remplaçais seulement onTouchEvent: @Override public boolean onTouchEvent (événement MotionEvent) { if (gesteDetector.onTouchEvent (événement)) \t return true; \t sinon \t \t return false; } Merci pour votre aide. Serait upvote une centaine de fois si je le pouvais. – GJTorikian

+0

Que diriez-vous de mon cas? J'ai une disposition avec un tabcontrol avec deux tabsheets. l'un d'eux a un viewflipper. ce viewflipper a quelques edittexts, boutons, etc à l'intérieur de sa mise en page. Ma question est, comment puis-je contrôler le détecteur de gestes pour activer seulement si l'utilisateur déplace le doigt dans mon viewflipper? Je veux dire ... si je fais ce que vous avez dit, l'utilisateur peut lancer sans voir le viewflipper ... J'ai essayé de mettre une mise au point focalisable mais c'est "onTouch" n'est pas gérer, même si je mets la focalisation descendante à "focus avant les descendants" – digulino

+0

@digulino bien, je suppose que vous devez inspecter le paramètre MotionEvent et décider s'il cible votre vue flipper ou non. –

1

essayer d'appliquer setLongClickable(true) pour la ViewFlipper

Questions connexes