Das verwirrt mich:
Soweit ich gelesen habe, eine Ansicht mit setVisibility (View.GONE); sollte keine Touch- oder Klickereignisse mehr erhalten. Mein Layout besteht aus zwei Teilen, die sichtbar oder verschwunden sind, sodass jeweils nur einer sichtbar und verwendbar ist, aber View.GONE macht den Trick nicht. Ich kann die GONE-Ansicht nicht wie erwartet sehen, aber sie reagiert trotzdem auf onClick (und verbraucht das Ereignis, das die andere Ansicht erhalten sollte).
Können Sie mir helfen?
Vielleicht von Interesse: Wenn ich mein Projekt starte, ist eine Ansicht GEGANGEN, die andere sichtbar. Dieses Mal funktioniert es wie erwartet (die GONE-Ansicht wird grundsätzlich ignoriert), aber nachdem Sie View.GONE über den Code eingestellt haben, funktioniert es nicht mehr.
quelle
hierarchyviewer
Tool den Status Ihrer Ansichtshierarchie zur Laufzeit zu überprüfen. Auf diese Weise können Sie den Sichtbarkeitsstatus und vieles mehr beim Debuggen von Ansichtsproblemen anzeigen.Antworten:
Verwenden Sie möglicherweise Animationen, um die Ansichten ein- oder auszublenden? Ich bekomme dieses Verhalten, wenn ich Animationen mit android: fillEnabled = "true" verwende. Android: fillAfter = "true" Verstehe es nicht und scheint ein Fehler zu sein. Wenn ich Animationen ohne fillEnabled / fillAfter verwende, funktioniert alles wie erwartet. ..
quelle
code @Override public void onAnimationEnd(Animation animation) { /* Android will make an exception when you change the view hierarchy * in animationEnd. http://stackoverflow.com/a/7445557/587186 */ new Handler().post(new Runnable() { public void run() { if (interventionPreview != null) { interventionPreview.setVisibility(View.GONE); } } }); }
hat das Ding gemacht, hoffe es hilft.Wenn Sie
setVisibility(View.GONE)
nach einer Animation festlegen (z. B. Ausblenden), löschen Sie die Animation mitclearAnimation()
. Das hat mir geholfen.quelle
android:fillAfter
undandroid:fillEnabled
in Ihren Animationen verwenden möchten und die Ansicht nicht mehr reagieren soll.clearAnimation()
die Animation gestoppt und ich kann die Einblend-Ausblend-Animation nicht sehen. Stattdessen habe ichalpha.setFillAfter(false);
in meiner Alpha-Animation genau das verwendet, was ich erwartet hatte.clearAnimation()
Aufruf inonAnimationEnd()
Methode setzen. Dann funktioniert es wie erwartet.Versuchen Sie, die setklickbare Eigenschaft mit setClickable (false) nach setVisibility (View.GONE) auf false zu setzen.
quelle
Ja,
mview.clearAnimation()
habe einige Probleme, aberamination.setFillAfter(false);
undmview.setClickable(false);
funktioniert perfekt.quelle
Was ich erwarte, ist, dass Sie eine Ansicht unsichtbar machen, Kinder jedoch immer noch auf Klicks reagieren (dh Ihre Ansicht ist eine ViewGroup). Sie könnten etwas in der Art tun:
private void hideTheChildren(View v){ if(v instanceof ViewGroup) { int count = ((ViewGroup)v).getChildCount(); for(int k = 0 ; k < count ; k++) { hideTheChildren(((ViewGroup)v).getChildAt(k)); } v.setVisibility(View.GONE); } else { v.setClickable(false); v.setVisibility(View.GONE); } }
dann muss man natürlich auch das gegenteil machen
private void showTheChildren(View v){ if(v instanceof ViewGroup) { int count = ((ViewGroup)v).getChildCount(); for(int k = 0 ; k < count ; k++) { showTheChildren(((ViewGroup)v).getChildAt(k)); } v.setVisibility(View.VISIBLE); } else { v.setClickable(true); v.setVisibility(View.VISIBLE); } }
Das hat in der Vergangenheit bei mir funktioniert. Ich kenne derzeit keinen besseren Weg, dies zu tun.
quelle
Ich hätte dies als Kommentar gepostet, konnte aber leider keinen Kommentar posten. Da es eine mögliche Lösung für Sie sein könnte, poste ich es so:
Beim Schreiben von "onClick" gehe ich davon aus, dass Sie das
onClick
Attribut in Ihrem XML-Layout verwenden. Versuchen Sie, anstelle des Attributs einOnClickListener
with festzulegen. Vielleicht hilft das...setOnClickListener
onClick
quelle
Für diejenigen, die die obigen Antworten ausgeführt und ihre Probleme immer noch nicht gelöst haben, empfehle ich, die Ansicht aus der übergeordneten Ansicht zu entfernen. Wenn Sie die Ansicht erneut anzeigen müssen, erstellen Sie einfach eine Kopie und fügen Sie sie der übergeordneten Ansicht hinzu.
Dies mag übertrieben erscheinen, aber ich habe ganze Ansichtsgruppen ausgeblendet / angezeigt. In Ihrem Fall handelt es sich möglicherweise um eine Schaltfläche, eine Textansicht oder ein Bild. Diese Lösung funktioniert weiterhin.
quelle
BottomSheetBehavior
beim Laden von Daten . Bei allen anderen Antworten fing die Ansicht die Berührungen / Gesten ab. Und das hat meineBottomSheetBehaviour
| gebrochen Android 8.0 mit Design-Support-Lib 27.0.2Versuchen Sie, .clearAnimation () in die Überschreibung onAnimationEnd einzufügen.
quelle
Wenn die Ansicht eine Animation enthält, sollten Sie view.clearAnimation aufrufen.
quelle