J'ai la mise en page de la trame: p> 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? P> EDIT: P> 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. P> Existe-t-il une explication de ce comportement? Tnx! P> p>
5 Réponses :
Définition peut-être l'attribut de superposition Vous pourriez aussi faire votre propre Widget de superposition et remplacement de son Android: Focigable = "FALSE" CODE> ou
Android: FocableInTouchMode = "Faux" Code> serait suffisant.
Oninterceptouchevent code> pour renvoyer False Toujours. P>
public class NotTouchableLinearLayout extends LinearLayout {
// Override constructors
// ...
@Override
public boolean onInterceptTouchEvent(MotionEvent ev) {
return false;
}
}
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.
au lieu de définir un 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 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.
Ontchevent Code> Retours
FALSE code>), vous les obtiendrez sur la mise en page supérieure. 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;
}
}
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 ...
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 p>
OK, cela fonctionne parfaitement pour la détection ... Comment puis-je passer maintenant cliquer pour caler en dessous?
Pour obtenir les clics longs pour passer via le widgeview SO GreatView devient: P> linearlayout code> Ajouter
Android: Longclickable = "vrai" code>. (Pour des clics ordinaires Ajouter
Android: Clickable = "true" code>)
<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>
Dans mon cas, j'ai ajouté Drapeau à layoutParams de ma vue, qui aurait dû réussir un événement tactile sous: de cette façon, la vue ignorera toutes les touches (comme la vue de la visibilité de la visibilité) < / p> p>