2016-02-05 17 views
14

Moja aplikacja na Androida wyświetla kilka komunikatów Toast. Niedawno zainstalowałem go na Galaxy S6 z systemem Android 5.1.1 i zauważyłem, że komunikaty są wyświetlane początkowo wokół środka ekranu, a następnie przesuwają się do właściwej pozycji (blisko dołu, jeśli nie określono Grawitacji), a następnie z powrotem do początkowa pozycja przed zniknięciem.Android Toast porusza się po ekranie

Context context = getApplicationContext(); 
String newMsg = getString(R.string.wild_card_msg); 
Toast mToast = Toast.makeText(context, newMsg, Toast.LENGTH_LONG); 
mToast.setGravity(Gravity.CENTER, 0, 0); 
mToast.show(); 

Aktualizacja:

  • Mam zmodernizowane biblioteki obsługi, jak również zestaw SDK i kompilacji docelową SDK do najnowszej API. To nie rozwiązało problemu
  • Usunąłem wszystkie wywołania .setGravity(). Bez zmiany.
  • Zauważyłem, że wiadomości Toast zachowują się poprawnie przy pierwszym uruchomieniu po instalacji (czy to w trybie debugowania USB, czy też poprzez pobranie z PlayStore), ale problem pojawia się ponownie w (wszystkich) kolejnych uruchomieniach.
  • Odkryłem również, że moje wiadomości Toast znikną natychmiast po dotknięciu ekranu (w dowolnym miejscu). Sądziłem, że interakcje użytkownika nie wpływają na wyświetlacze Toast.

Ktoś inny, kto ma ten problem, wie, jak to naprawić lub znać obejście tego problemu?

Proszę zauważyć, że zaakceptowałem odpowiedź Nicka, proponując snackbar jako obejście.

+3

Należy podać kod używanego do pokaż toast. To byłoby bardzo dziwne. –

+0

Dziękuję, David, za szybką odpowiedź. Oto przykład: Kontekst kontekst = getApplicationContext(); Ciąg newMsg = getString (R.string.wild_card_msg); Toast mToast = Toast.makeText (context, newMsg, Toast.LENGTH_LONG); mToast.setGravity (Gravity.CENTER, 0, 0); mToast.pokazać(); –

+0

Proszę edytować pytanie i nie wpisywać kodu w komentarzach. czy jest jakiś powód, dla którego ustawiłeś grawitację na swoim toście? Po raz pierwszy widzę, jak ktoś robi * to * –

Odpowiedz

7

Twoje pytanie o naprawę lub obejście problemu:. Najprostszym sposobem obejścia tego problemu jest (moim zdaniem) również najlepsza opcja, ponieważ przeniesie Cię do bardziej nowoczesnych komponentów: Przełącz na pasek z przekąskami.

Proste Snackbar:

//on a fragment you can simply use getView(), otherwise give it the root view of your 
//layout so that the snackbar can use it to find context 

Snackbar.make(getView(), "The toast text", Snackbar.LENGTH_SHORT).show(); 

Jest w wsparcia biblioteki projektowej dla kompatybilności.

To snackbar:

enter image description here

A niektóre z bibliotek support/projektowych, które mogą być zawarte w Gradle są

compile 'com.android.support:design:23.1.1' 
compile 'com.android.support:support-v4:23.1.1' 
compile 'com.android.support:appcompat-v7:23.1.1' 
+0

Thx, zdecydowanie chcę wypróbować tę opcję Przygotuję mój program odpowiednio (przypuszczam, że muszę dodać kompilację oświadczenie w skrypcie Gradle i więcej), przetestuj to i podziel się wynikiem. –

+0

Oczywiście, używam tych, które właśnie dodałem do mojej odpowiedzi. –

+1

Udało mi się uruchomić rozwiązanie snackBar. Zaokrąglony kształt Toast's są nieco bardziej "sexy" ... ale snackBar zawierają zasadniczo równoważną funkcjonalność (i oferują większy potencjał). Przede wszystkim nie zastanawiają się na moim ekranie S6! Podsumowując: jest to świetne rozwiązanie mojego problemu i formalnie "przyjąłem" twoją odpowiedź. Dziękuję Nick! –

-2

wypróbować ten prosty tosty

Toast.makeText(getApplicationContext(),"Your message", Toast.LENGTH_SHORT).show(); 
+0

Dior DNA wspomniał, że już wypróbował to podejście. –

+0

@Rajen nie powiedział, że próbował tak, powiedział, że próbował z "tym", "działaniem" itp. Niech komentuje, czy próbował tego, czy nie. – Tara

+0

sprawdź to "(Nie widziałem tam" edytowania "... dziękuję za zrobienie tego dla mnie) W konkretnym przykładzie powyżej ustawiłem określoną wagę, aby uniknąć ukrycia odpowiedniej części ekranu, którą chcę pozostają widoczne dla użytkownika, jednak nie ma to prawdopodobnie nic wspólnego z dziwnym zachowaniem **, jak to się dzieje również w przypadku prostszych instrukcji Toast bez grawitacji. ** - Dior DNA 5 lutego o 18:15 ' –

3

To właśnie z powodu tej dostosowanej wersji Androida, które sprzedawców rozmieścić z ich produktów, to jest prawdziwe dla animacji działalności też można osiągnąć pożądane zachowanie na wszystkich urządzeniach rozszerzenie klasy Toast i dostarczenie własnej animacji i stylu lub użycie biblioteki otwartego źródła do wyświetlania komunikatów toastów, ponieważ czynności ustawiające niestandardową animację dla działań tworzą stałą animację na wszystkich urządzeniach.

+0

Twoja odpowiedź brzmi wiarygodnie Jedna z 2 S6, na której mam problem, pochodzi od (europejskiego) operatora. (i inni klienci) W pozostałej części odpowiedzi zdaję sobie sprawę, że istnieją niestandardowe opcje, ale chciałbym, aby standard Toast (lub odpowiednik) działał jako pierwszy –

Powiązane problemy