co masz na myśli przez toast niestandardowy? co próbujesz pokazać
thepoosh
To nie jest prawdziwe pytanie. Powinieneś spróbować czytać dokumenty na developer.android
adatapost
Mam niestandardowe okno wiadomości. Jeśli możesz go dostosować i dodać do niego licznik czasu i zmienić jego wygląd, opublikuję go za Ciebie. Czy możesz?
Bobs
1
Tutaj można znaleźć podstawowy przykład „Niestandardowego
tostu
Odpowiedzi:
198
Użyj poniższego kodu niestandardowego Toastu. To może ci pomóc.
„(ViewGroup) findViewById (R.id.toast_layout_root)” można zastąpić wartością „null”. Ponieważ twoja aktywność nie zawiera toast_layout, więc i tak zawsze będzie zerowa.
stevo.mit
2
Mój niestandardowy toast nie pojawił się, ponieważ używałem nowego układu ograniczeń jako widoku głównego mojego niestandardowego toastu. Kiedy przeszedłem na układ liniowy, wszystko działało idealnie. Więc ostrzegam ...
Charles Woodson
naprawdę ktoś mógłby wyjaśnić cel findViewById (R.id.toast_layout_root)? i tak będzie zerowe i działa doskonale po prostu podając wartość null
użyj tego, jeśli ulegniesz awarii, ponieważ findViewById ma wartość null: View layout = inflater.inflate (R.layout.toast_layout, null);
Bita Mirshafiee
38
Toast jest za wyświetlanie wiadomości w krótkich odstępach czasu; Tak więc, zgodnie z moim rozumieniem, chciałbyś go dostosować, dodając do niego obraz i zmieniając rozmiar, kolor tekstu wiadomości. Jeśli to wszystko, co chcesz zrobić, nie ma potrzeby tworzenia osobnego układu i nadmuchiwania go do instancji Toast.
Domyślny widok Toast zawiera TextViewikonę do wyświetlania wiadomości. Tak więc, jeśli mamy odniesienie do identyfikatora zasobu TextView, możemy się tym bawić. Oto co możesz zrobić, aby to osiągnąć:
Toast toast =Toast.makeText(this,"I am custom Toast!",Toast.LENGTH_LONG);View toastView = toast.getView();// This'll return the default View of the Toast./* And now you can get the TextView of the default View of the Toast. */TextView toastMessage =(TextView) toastView.findViewById(android.R.id.message);
toastMessage.setTextSize(25);
toastMessage.setTextColor(Color.RED);
toastMessage.setCompoundDrawablesWithIntrinsicBounds(R.mipmap.ic_fly,0,0,0);
toastMessage.setGravity(Gravity.CENTER);
toastMessage.setCompoundDrawablePadding(16);
toastView.setBackgroundColor(Color.CYAN);
toast.show();
W powyższym kodzie możesz zobaczyć, możesz dodać obraz do TextView poprzez setCompoundDrawablesWithIntrinsicBounds(int left, int top, int right, int bottom)dowolną pozycję względem TextView, którą chcesz.
Jest na to znacznie mniej szans, ale mimo to myślę, że TextViewpowinien tam być czek, żeby był bezpieczny i przez czek, mam na myśli czek zerowy lub czek typu. Na wszelki wypadek Google postanawia zmienić identyfikator lub widok wyświetlania tekstu w klasie Toast. W każdym razie ... +1
DroidDev
1
Prawdziwe! Ale jeśli zostanie zmieniony, i tak nie będziesz mieć dostępu do identyfikatora zasobu, ponieważ nie istnieje. Ale nawet jeśli jesteś po bezpiecznej stronie, czek NULL ułatwi ci życie. @DroidDev dzięki za sugestię :)
TheLittleNaruto
16
KROK 1:
Najpierw utwórz układ niestandardowego toastu w res/layout/custom_toast.xml:
KROK 2: W kodzie aktywności pobierz powyższy widok niestandardowy i dołącz do Toast:
// Get your custom_toast.xml ayoutLayoutInflater inflater = getLayoutInflater();View layout = inflater.inflate(R.layout.custom_toast,(ViewGroup) findViewById(R.id.custom_toast_layout_id));// set a messageTextView text =(TextView) layout.findViewById(R.id.text);
text.setText("Button is clicked!");// Toast...Toast toast =newToast(getApplicationContext());
toast.setGravity(Gravity.CENTER_VERTICAL,0,0);
toast.setDuration(Toast.LENGTH_LONG);
toast.setView(layout);
toast.show();
Aby uzyskać więcej pomocy, zobacz, jak tworzymy niestandardowy Toast w systemie Android:
Zobacz link tutaj . Znajdziesz swoje rozwiązanie. I próbuj:
Tworzenie niestandardowego widoku toast
Jeśli zwykła wiadomość tekstowa nie wystarczy, możesz utworzyć niestandardowy układ powiadomienia wyskakującego. Aby utworzyć układ niestandardowy, zdefiniuj układ widoku w formacie XML lub w kodzie aplikacji i przekaż główny obiekt View do metody setView (View).
Na przykład możesz utworzyć układ tostu widoczny na zrzucie ekranu po prawej stronie za pomocą następującego kodu XML (zapisanego jako toast_layout.xml):
Zwróć uwagę, że identyfikator elementu LinearLayout to „toast_layout”. Musisz użyć tego identyfikatora, aby nadmuchać układ z XML, jak pokazano tutaj:
LayoutInflater inflater = getLayoutInflater();View layout = inflater.inflate(R.layout.toast_layout,(ViewGroup) findViewById(R.id.toast_layout_root));ImageView image =(ImageView) layout.findViewById(R.id.image);
image.setImageResource(R.drawable.android);TextView text =(TextView) layout.findViewById(R.id.text);
text.setText("Hello! This is a custom toast!");Toast toast =newToast(getApplicationContext());
toast.setGravity(Gravity.CENTER_VERTICAL,0,0);
toast.setDuration(Toast.LENGTH_LONG);
toast.setView(layout);
toast.show();
Najpierw pobierz LayoutInflater za pomocą metody getLayoutInflater () (lub getSystemService ()), a następnie wypełnij układ z XML za pomocą inflate (int, ViewGroup). Pierwszy parametr to identyfikator zasobu układu, a drugi to widok główny. Możesz użyć tego zawyżonego układu, aby znaleźć więcej obiektów View w układzie, więc teraz przechwyć i zdefiniuj zawartość dla elementów ImageView i TextView. Na koniec utwórz nowy Toast z Toast (Kontekst) i ustaw niektóre właściwości toastu, takie jak grawitacja i czas trwania. Następnie wywołaj setView (View) i przekaż mu zawyżony układ. Możesz teraz wyświetlić toast z własnym układem, wywołując funkcję show ().
Uwaga: nie używaj publicznego konstruktora dla Toast, chyba że zamierzasz zdefiniować układ za pomocą setView (View). Jeśli nie masz niestandardowego układu do użycia, musisz użyć makeText (Context, int, int), aby utworzyć Toast.
Myślę, że większość przykładów XML Customtoast w Internecie jest opartych na tym samym źródle.
Dokumentacja Androida, która jest moim zdaniem bardzo nieaktualna. Nie należy już używać funkcji fill_parent. Wolę używać wrap_content w połączeniu z xml.9.png. W ten sposób możesz zdefiniować minimalny rozmiar toastbackground w całym rozmiarze podanego źródła.
Jeśli wymagane są bardziej złożone tosty, zamiast LL należy zastosować układ ramkowy lub względny.
Aby uniknąć problemów z nieprawidłowym użyciem parametrów layout_ *, musisz upewnić się, że podczas wypełniania niestandardowego układu określasz poprawną ViewGroup jako element nadrzędny.
Wiele przykładów przekazuje tutaj wartość null, ale zamiast tego możesz przekazać istniejącą Toast ViewGroup jako swojego rodzica.
val toast =Toast.makeText(this,"",Toast.LENGTH_LONG)
val layout =LayoutInflater.from(this).inflate(R.layout.view_custom_toast, toast.view.parent as?ViewGroup?)
toast.view = layout
toast.show()
Tutaj zastępujemy istniejący widok Toast naszym widokiem niestandardowym. Po uzyskaniu odniesienia do „układu” układu można zaktualizować wszelkie obrazy / widoki tekstu, które może on zawierać.
To rozwiązanie zapobiega również awariom typu „Widok niepołączony do menedżera okien” używania wartości null jako elementu nadrzędnego.
Unikaj również używania ConstraintLayout jako katalogu głównego układu niestandardowego, wydaje się, że nie działa, gdy jest używany wewnątrz Toast.
<RelativeLayoutxmlns:android="http://schemas.android.com/apk/res/android"xmlns:tools="http://schemas.android.com/tools"android:layout_width="match_parent"android:layout_height="match_parent"android:paddingBottom="@dimen/activity_vertical_margin"android:paddingLeft="@dimen/activity_horizontal_margin"android:paddingRight="@dimen/activity_horizontal_margin"android:paddingTop="@dimen/activity_vertical_margin"tools:context="com.android_examples.com.toastbackgroundcolorchange.MainActivity"><Buttonandroid:id="@+id/button1"android:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_centerHorizontal="true"android:layout_centerVertical="true"android:text="CLICK HERE TO SHOW TOAST MESSAGE WITH DIFFERENT BACKGROUND COLOR INCLUDING BORDER"/></RelativeLayout>
Kod pliku układu toast_background_color.xml utworzonego w folderze res-> layout.
Niestandardowe tosty z tła są blokowane, system Android 11 chroni użytkowników, wycofując niestandardowe widoki toastów. Ze względów bezpieczeństwa i w celu zapewnienia dobrego wrażenia użytkownika system blokuje tosty zawierające niestandardowe widoki, jeśli te tosty są wysyłane z tła przez aplikację przeznaczoną dla systemu Android 11.
addCallback () metoda dodana w systemie Android R Jeśli chcesz być powiadamiany o pojawieniu się lub zniknięciu toastu (tekstowego lub niestandardowego).
Najważniejszy tekst w tosty zmian API że dla aplikacji na Androida 11 to getView()wraca metoda wartość null, gdy do niego dostęp, więc zapewnić, aby chronić swoje aplikacje z krytyczny wyjątek, wiesz o co mi chodzi :)
Odpowiedzi:
Użyj poniższego kodu niestandardowego Toastu. To może ci pomóc.
toast.xml
MainActivity.java
Sprawdź również poniższe linki, aby uzyskać niestandardowy Toast.
Niestandardowe tosty z zegarem analogowym
YouTube: Tworzenie niestandardowego tosta za pomocą przycisku w Android Studio
źródło
Toast jest za wyświetlanie wiadomości w krótkich odstępach czasu; Tak więc, zgodnie z moim rozumieniem, chciałbyś go dostosować, dodając do niego obraz i zmieniając rozmiar, kolor tekstu wiadomości. Jeśli to wszystko, co chcesz zrobić, nie ma potrzeby tworzenia osobnego układu i nadmuchiwania go do instancji Toast.
Domyślny widok Toast zawiera
TextView
ikonę do wyświetlania wiadomości. Tak więc, jeśli mamy odniesienie do identyfikatora zasobuTextView
, możemy się tym bawić. Oto co możesz zrobić, aby to osiągnąć:W powyższym kodzie możesz zobaczyć, możesz dodać obraz do TextView poprzez
setCompoundDrawablesWithIntrinsicBounds(int left, int top, int right, int bottom)
dowolną pozycję względem TextView, którą chcesz.Aktualizacja:
Napisali klasę budowniczego, aby uprościć powyższy cel; Oto link: https://gist.github.com/TheLittleNaruto/6fc8f6a2b0d0583a240bd78313ba83bc
Sprawdź
HowToUse.kt
powyższy link.Wynik:
źródło
TextView
powinien tam być czek, żeby był bezpieczny i przez czek, mam na myśli czek zerowy lub czek typu. Na wszelki wypadek Google postanawia zmienić identyfikator lub widok wyświetlania tekstu w klasie Toast. W każdym razie ... +1KROK 1:
Najpierw utwórz układ niestandardowego toastu w
res/layout/custom_toast.xml
:KROK 2: W kodzie aktywności pobierz powyższy widok niestandardowy i dołącz do Toast:
Aby uzyskać więcej pomocy, zobacz, jak tworzymy niestandardowy Toast w systemie Android:
http://developer.android.com/guide/topics/ui/notifiers/toasts.html
źródło
Zobacz link tutaj . Znajdziesz swoje rozwiązanie. I próbuj:
Tworzenie niestandardowego widoku toast
Jeśli zwykła wiadomość tekstowa nie wystarczy, możesz utworzyć niestandardowy układ powiadomienia wyskakującego. Aby utworzyć układ niestandardowy, zdefiniuj układ widoku w formacie XML lub w kodzie aplikacji i przekaż główny obiekt View do metody setView (View).
Na przykład możesz utworzyć układ tostu widoczny na zrzucie ekranu po prawej stronie za pomocą następującego kodu XML (zapisanego jako toast_layout.xml):
Zwróć uwagę, że identyfikator elementu LinearLayout to „toast_layout”. Musisz użyć tego identyfikatora, aby nadmuchać układ z XML, jak pokazano tutaj:
Najpierw pobierz LayoutInflater za pomocą metody getLayoutInflater () (lub getSystemService ()), a następnie wypełnij układ z XML za pomocą inflate (int, ViewGroup). Pierwszy parametr to identyfikator zasobu układu, a drugi to widok główny. Możesz użyć tego zawyżonego układu, aby znaleźć więcej obiektów View w układzie, więc teraz przechwyć i zdefiniuj zawartość dla elementów ImageView i TextView. Na koniec utwórz nowy Toast z Toast (Kontekst) i ustaw niektóre właściwości toastu, takie jak grawitacja i czas trwania. Następnie wywołaj setView (View) i przekaż mu zawyżony układ. Możesz teraz wyświetlić toast z własnym układem, wywołując funkcję show ().
Uwaga: nie używaj publicznego konstruktora dla Toast, chyba że zamierzasz zdefiniować układ za pomocą setView (View). Jeśli nie masz niestandardowego układu do użycia, musisz użyć makeText (Context, int, int), aby utworzyć Toast.
źródło
Układ niestandardowy na grzanki,
custom_toast.xml
:I metoda Java (po prostu przekaż wiadomość toast do tej metody):
źródło
Możesz pobrać kod tutaj .
Krok 1:
Krok 2:
Krok 3:
źródło
Myślę, że większość przykładów XML Customtoast w Internecie jest opartych na tym samym źródle.
Dokumentacja Androida, która jest moim zdaniem bardzo nieaktualna. Nie należy już używać funkcji fill_parent. Wolę używać wrap_content w połączeniu z xml.9.png. W ten sposób możesz zdefiniować minimalny rozmiar toastbackground w całym rozmiarze podanego źródła.
Jeśli wymagane są bardziej złożone tosty, zamiast LL należy zastosować układ ramkowy lub względny.
toast.xml
background.xml
background_96 to background_96.9.png.
Nie jest to zbyt dobrze przetestowane, a wskazówki są mile widziane :)
źródło
Aby uniknąć problemów z nieprawidłowym użyciem parametrów layout_ *, musisz upewnić się, że podczas wypełniania niestandardowego układu określasz poprawną ViewGroup jako element nadrzędny.
Wiele przykładów przekazuje tutaj wartość null, ale zamiast tego możesz przekazać istniejącą Toast ViewGroup jako swojego rodzica.
Tutaj zastępujemy istniejący widok Toast naszym widokiem niestandardowym. Po uzyskaniu odniesienia do „układu” układu można zaktualizować wszelkie obrazy / widoki tekstu, które może on zawierać.
To rozwiązanie zapobiega również awariom typu „Widok niepołączony do menedżera okien” używania wartości null jako elementu nadrzędnego.
Unikaj również używania ConstraintLayout jako katalogu głównego układu niestandardowego, wydaje się, że nie działa, gdy jest używany wewnątrz Toast.
źródło
To jest to, czego użyłem
AllMethodsInOne.java
YourFile.java
Dzwoniąc po prostu napisz poniżej.
źródło
Kod pliku MainActivity.java.
Kod pliku układu activity_main.xml.
Kod pliku układu toast_background_color.xml utworzonego w folderze res-> layout.
źródło
// Niestandardowa klasa tostów, w której możesz wyświetlać tosty niestandardowe lub domyślne zgodnie z potrzebami
źródło
Prosty sposób na dostosowanie tosta,
źródło
Dla wszystkich użytkowników Kotlin
Możesz utworzyć rozszerzenie, takie jak:
źródło
Stworzenie własnego projektu jest bardzo proste
Toast
.Po prostu wykonaj poniższe czynności.
Krok 1
Utwórz układ niestandardowy, który chcesz
Krok 2
Teraz utwórz niestandardową klasę, która rozszerza
Toast
.Stworzyliśmy niestandardowy tost.
Krok 3
Teraz wreszcie, jak możemy z tego skorzystać.
Cieszyć się!!
źródło
Uwaga, aktualizacje toastów w systemie Android 11
addCallback () metoda dodana w systemie Android R Jeśli chcesz być powiadamiany o pojawieniu się lub zniknięciu toastu (tekstowego lub niestandardowego).
Najważniejszy tekst w tosty zmian API że dla aplikacji na Androida 11 to
getView()
wraca metoda wartość null, gdy do niego dostęp, więc zapewnić, aby chronić swoje aplikacje z krytyczny wyjątek, wiesz o co mi chodzi :)źródło
Korzystając z tej biblioteki o nazwie Toasty , myślę, że masz wystarczającą elastyczność, aby przygotować niestandardowy toast w następujący sposób -
Możesz również przekazać sformatowany tekst do Toasty, a oto fragment kodu
źródło
Źródła: https://developer.android.com/guide/topics/ui/notifiers/toasts
źródło