7
votes

Pass Cliquez sur l'événement via la vue Android

J'ai la mise en page de la trame: xxx

première mise en page contient la mise en page du widget, et la seconde est transparente et reçoit OnlongClick pour faire glisser la méthode.Quez les travaux, le problème est Lorsque je veux interagir avec widget, cliquez sur quelque chose, cliquez sur l'événement est pris par OverLayFrame. Comment puis-je passer sur une superposition de l'événement de l'événement Café-cadre à widgetView?

EDIT:

J'essaie maintenant d'attacher gesteRelister à superfeuille Linearlayout, à la différence de la différence entre MotionEvent qui représente un simple clic et long clic. Le problème que je suis confronté est que Onlongress in gestes-auditeur est toujours appelé tout ce que je fais, un seul clic ou un clic long.

Existe-t-il une explication de ce comportement? Tnx!


0 commentaires

5 Réponses :


0
votes

Définition peut-être l'attribut de superposition Android: Focigable = "FALSE" CODE> ou Android: FocableInTouchMode = "Faux" Code> serait suffisant.

Vous pourriez aussi faire votre propre Widget de superposition et remplacement de son Oninterceptouchevent code> pour renvoyer False Toujours. P>

public class NotTouchableLinearLayout extends LinearLayout {

    // Override constructors
    // ...

   @Override
    public boolean onInterceptTouchEvent(MotionEvent ev) {
        return false;
    }
}


5 commentaires

Essayez de remplacer AOUTTOUCH au lieu d'Onterceptouchevent.


Hehe, je l'ai fait, mais maintenant Onlongclick sur SupervaudyLayout n'est pas appelé. Et je ne peux pas faire glisser des objets.


Comment puis-je faire la différence dans AOUTTOUD entre clic et long clic?


Stackoverflow.com/ Questions / 4324362 / ...


Je ne peux pas obtenir ce travail. Peux-tu être plus précis. Il n'y a pas non plus de réponse acceptée.



0
votes

au lieu de définir un gestuelistener code> sur la mise en page supérieure, vous devez créer votre propre classe qui s'étend linearlayout code> et pour remplacer sa méthode Ontouchevent CODE>. Là, vous pouvez mettre en œuvre la logique de clic long \ Short Click, etc.

Les événements de clic seront d'abord envoyés à la disposition du widget, et seulement s'il ne les gère pas (par conséquent, il est Ontchevent Code> Retours FALSE code>), vous les obtiendrez sur la mise en page supérieure. P>

EDIT: FORT> P>

        public class MyLinearLayout extends LinearLayout{

        public MyLinearLayout(Context context, AttributeSet attrs) {
            super(context, attrs);
        }

        private long startClick = 0;

        @Override
        public boolean onTouchEvent(MotionEvent ev) {
            switch (ev.getAction()) {
                case MotionEvent.ACTION_DOWN:
                    startClick = ev.getEventTime();
                    break;
                case MotionEvent.ACTION_CANCEL:
                case MotionEvent.ACTION_UP:
                    if (ev.getEventTime() - startClick < 500) {
                        Log.i("example","short click");
                    }
                    else {
                        Log.i("example","long click");
                    }
                    break;
            }

            return true;
        }

    }


4 commentaires

Je vais essayer cela maintenant;) TNX ... ça a du sens ... J'espère que cela fonctionne ... J'ai perdu quelques jours avec ceci.


La couche de widget ne reçoit pas de courte clic ...: / la détection fonctionne bien et je retourne false au court-circuit, mais le widget reste toujours et ne réagit pas sur cette action.


Une autre chose ... je dois détecter un long clic sur l'action vers le bas ... Je travaille sur le lanceur personnalisé ... Vous savez comment les widgets se déplacent autour de l'écran? Onlong click commence drag ...


J'ai fait ça ... Si je n'ai pas mon application se crânera ... ça marche ... mais widget n'intercepte pas cliquez sur l'événement ...



0
votes

Au lieu d'utiliser Gesturelistener, vous pouvez remplacer l'Ontouchlistener de cette manière.

Ceci appellera Longress lorsque la minuterie s'épuise et si l'arrivée entre elle entre elle annulera la longueur xxx


1 commentaires

OK, cela fonctionne parfaitement pour la détection ... Comment puis-je passer maintenant cliquer pour caler en dessous?



0
votes

Pour obtenir les clics longs pour passer via le widgeview linearlayout code> Ajouter Android: Longclickable = "vrai" code>. (Pour des clics ordinaires Ajouter Android: Clickable = "true" code>)

SO GreatView devient: P>

<LinearLayout
    android:id="@+id/widgetView"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:layout_gravity="center"
    android:layout_margin="10dp"
    android:gravity="center" 
    android:longClickable="true">
</LinearLayout>


0 commentaires

5
votes

Dans mon cas, j'ai ajouté Drapeau à layoutParams de ma vue, qui aurait dû réussir un événement tactile sous: xxx

de cette façon, la vue ignorera toutes les touches (comme la vue de la visibilité de la visibilité) < / p>


0 commentaires