что вы имеете в виду под тостами на заказ? что ты пытаешься показать?
thepoosh 02
Это не настоящий вопрос. Вам следует попробовать почитать документацию на developer.android
adatapost 02
У меня есть настраиваемое окно сообщения. Если вы можете настроить его, добавить к нему таймер и изменить его внешний вид, я отправлю его вам. Ты можешь?
Bobs
1
Здесь вы можете найти базовый пример «Пользовательского
тоста
Ответы:
198
Используйте приведенный ниже код пользовательского тоста. Это может вам помочь.
"(ViewGroup) findViewById (R.id.toast_layout_root)" можно заменить на "null". Поскольку ваша активность не содержит toast_layout, поэтому в любом случае она всегда будет нулевой.
stevo.mit
2
Мой пользовательский тост не отображался, потому что я использовал новый макет ограничений в качестве корневого представления моего пользовательского тоста. Как только я перешел на линейную компоновку, все заработало отлично. Так что будьте
Чарльз Вудсон
неужели кто-нибудь мог объяснить назначение findViewById (R.id.toast_layout_root)? в любом случае он будет нулевым, и он отлично работает, если просто передать null
используйте это, если вы упали из-за findViewById is null: View layout = inflater.inflate (R.layout.toast_layout, null);
Бита Миршафи,
38
Тост предназначен для отображения сообщений в течение коротких промежутков времени; Итак, насколько я понимаю, вы хотели бы настроить его, добавив к нему изображение и изменив размер, цвет текста сообщения. Если это все, что вы хотите сделать, то нет необходимости создавать отдельный макет и раздувать его до экземпляра Toast.
В представлении тоста по умолчанию есть значок TextViewдля отображения на нем сообщений. Итак, если у нас есть ссылка на идентификатор ресурса TextView, мы можем поиграть с ним. Итак, что вы можете сделать для этого ниже:
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();
В приведенном выше коде вы можете видеть, что вы можете добавить изображение в TextView через setCompoundDrawablesWithIntrinsicBounds(int left, int top, int right, int bottom)любую позицию относительно TextView, которую вы хотите.
Шансов на это очень мало, но все же я думаю, что проверка на это TextViewдолжна быть, просто на всякий случай, и под проверкой я имею в виду нулевую проверку или проверку типа. На всякий случай Google решает изменить идентификатор или представление для отображения текста в классе Toast. В любом случае ... +1
DroidDev
1
Правда! Но если он будет изменен, вы все равно не сможете получить доступ к идентификатору ресурса, потому что его не существует. Но даже если на всякий случай, проверка NULL облегчит вашу жизнь. @DroidDev, спасибо за предложение :)
TheLittleNaruto
16
ШАГ 1:
Сначала создайте макет для пользовательского тоста в res/layout/custom_toast.xml:
ШАГ 2: В коде действия получите указанное выше пользовательское представление и прикрепите его к 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();
Чтобы получить дополнительную помощь, посмотрите, как мы создаем собственный тост в Android:
См. Ссылку здесь . Вы найдете свое решение. И попробуйте:
Создание настраиваемого представления тостов
Если простого текстового сообщения недостаточно, вы можете создать индивидуальный макет для тост-уведомления. Чтобы создать пользовательский макет, определите макет представления в XML или в коде приложения и передайте корневой объект View методу setView (View).
Например, вы можете создать макет для тоста, показанного на снимке экрана справа, с помощью следующего XML (сохраненного как toast_layout.xml):
Обратите внимание, что идентификатор элемента LinearLayout - «toast_layout». Вы должны использовать этот идентификатор для расширения макета из XML, как показано здесь:
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();
Сначала извлеките LayoutInflater с помощью getLayoutInflater () (или getSystemService ()), а затем раздувайте макет из XML с помощью inflate (int, ViewGroup). Первый параметр - это идентификатор ресурса макета, а второй - корневой вид. Вы можете использовать этот раздутый макет, чтобы найти больше объектов View в макете, поэтому теперь захватите и определите содержимое для элементов ImageView и TextView. Наконец, создайте новый тост с помощью Toast (Context) и установите некоторые свойства тоста, такие как плотность и продолжительность. Затем вызовите setView (View) и передайте ему расширенный макет. Теперь вы можете отобразить тост с вашим настраиваемым макетом, вызвав show ().
Примечание. Не используйте общедоступный конструктор для тоста, если вы не собираетесь определять макет с помощью setView (View). Если у вас нет настраиваемого макета для использования, вы должны использовать makeText (Context, int, int) для создания Toast.
Я думаю, что большинство XML-примеров customtoast в Интернете основаны на одном и том же источнике.
Документация для Android, на мой взгляд, очень устарела. fill_parent больше не должен использоваться. Я предпочитаю использовать wrap_content в сочетании с xml.9.png. Таким образом, вы можете определить минимальный размер toastbackground во всем размере предоставленного источника.
Если требуются более сложные тосты, вместо LL следует использовать рамку или относительную компоновку.
Чтобы избежать проблем с неправильным использованием параметров layout_ *, необходимо убедиться, что при расширении настраиваемого макета вы указали правильную ViewGroup в качестве родительского элемента.
Во многих примерах здесь передается значение null, но вместо этого вы можете передать существующую группу Toast ViewGroup в качестве родительской.
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()
Здесь мы заменяем существующее представление Toast нашим настраиваемым представлением. Если у вас есть ссылка на «макет» макета, вы можете обновить любые изображения / текстовые представления, которые он может содержать.
Это решение также предотвращает сбой «Просмотр, не прикрепленный к оконному менеджеру» от использования null в качестве родительского элемента.
Кроме того, избегайте использования ConstraintLayout в качестве корня настраиваемого макета, это не работает при использовании внутри тоста.
<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>
Код для файла макета toast_background_color.xml, созданного в папке res-> layout.
Пользовательские всплывающие подсказки из фона блокируются, Android 11 защищает пользователей, отказываясь от поддержки пользовательских просмотров всплывающих уведомлений. По соображениям безопасности и для поддержания хорошего взаимодействия с пользователем система блокирует всплывающие сообщения, содержащие настраиваемые представления, если эти всплывающие сообщения отправляются из фона приложением, предназначенным для Android 11.
В Android R добавлен метод addCallback (), если вы хотите получать уведомления, когда всплывающее сообщение (текстовое или настраиваемое) появляется или исчезает.
Самый важный текст тоста изменений API , что для приложений , которые целевой Android 11 в getView()метод возвращает нулевое значение , когда вы к нему доступ, поэтому убедитесь , чтобы защитить свои приложения от к неустранимым, вы знаете , что я имею в виду :)
Ответы:
Используйте приведенный ниже код пользовательского тоста. Это может вам помочь.
toast.xml
MainActivity.java
И ознакомьтесь с приведенными ниже ссылками также для пользовательского тоста.
Пользовательский тост с аналоговыми часами
YouTube: создание пользовательского тоста с помощью кнопки в Android Studio
источник
Тост предназначен для отображения сообщений в течение коротких промежутков времени; Итак, насколько я понимаю, вы хотели бы настроить его, добавив к нему изображение и изменив размер, цвет текста сообщения. Если это все, что вы хотите сделать, то нет необходимости создавать отдельный макет и раздувать его до экземпляра Toast.
В представлении тоста по умолчанию есть значок
TextView
для отображения на нем сообщений. Итак, если у нас есть ссылка на идентификатор ресурсаTextView
, мы можем поиграть с ним. Итак, что вы можете сделать для этого ниже:В приведенном выше коде вы можете видеть, что вы можете добавить изображение в TextView через
setCompoundDrawablesWithIntrinsicBounds(int left, int top, int right, int bottom)
любую позицию относительно TextView, которую вы хотите.Обновить:
Написали класс строителя, чтобы упростить вышеуказанную цель; Вот ссылка: https://gist.github.com/TheLittleNaruto/6fc8f6a2b0d0583a240bd78313ba83bc
Проверьте
HowToUse.kt
ссылку выше.Вывод:
источник
TextView
должна быть, просто на всякий случай, и под проверкой я имею в виду нулевую проверку или проверку типа. На всякий случай Google решает изменить идентификатор или представление для отображения текста в классе Toast. В любом случае ... +1ШАГ 1:
Сначала создайте макет для пользовательского тоста в
res/layout/custom_toast.xml
:ШАГ 2: В коде действия получите указанное выше пользовательское представление и прикрепите его к Toast:
Чтобы получить дополнительную помощь, посмотрите, как мы создаем собственный тост в Android:
http://developer.android.com/guide/topics/ui/notifiers/toasts.html
источник
См. Ссылку здесь . Вы найдете свое решение. И попробуйте:
Создание настраиваемого представления тостов
Если простого текстового сообщения недостаточно, вы можете создать индивидуальный макет для тост-уведомления. Чтобы создать пользовательский макет, определите макет представления в XML или в коде приложения и передайте корневой объект View методу setView (View).
Например, вы можете создать макет для тоста, показанного на снимке экрана справа, с помощью следующего XML (сохраненного как toast_layout.xml):
Обратите внимание, что идентификатор элемента LinearLayout - «toast_layout». Вы должны использовать этот идентификатор для расширения макета из XML, как показано здесь:
Сначала извлеките LayoutInflater с помощью getLayoutInflater () (или getSystemService ()), а затем раздувайте макет из XML с помощью inflate (int, ViewGroup). Первый параметр - это идентификатор ресурса макета, а второй - корневой вид. Вы можете использовать этот раздутый макет, чтобы найти больше объектов View в макете, поэтому теперь захватите и определите содержимое для элементов ImageView и TextView. Наконец, создайте новый тост с помощью Toast (Context) и установите некоторые свойства тоста, такие как плотность и продолжительность. Затем вызовите setView (View) и передайте ему расширенный макет. Теперь вы можете отобразить тост с вашим настраиваемым макетом, вызвав show ().
Примечание. Не используйте общедоступный конструктор для тоста, если вы не собираетесь определять макет с помощью setView (View). Если у вас нет настраиваемого макета для использования, вы должны использовать makeText (Context, int, int) для создания Toast.
источник
Пользовательский макет тоста
custom_toast.xml
:И метод Java (просто передайте этому методу тост-сообщение):
источник
Вы можете скачать код здесь .
Шаг 1:
Шаг 2:
Шаг 3:
источник
Я думаю, что большинство XML-примеров customtoast в Интернете основаны на одном и том же источнике.
Документация для Android, на мой взгляд, очень устарела. fill_parent больше не должен использоваться. Я предпочитаю использовать wrap_content в сочетании с xml.9.png. Таким образом, вы можете определить минимальный размер toastbackground во всем размере предоставленного источника.
Если требуются более сложные тосты, вместо LL следует использовать рамку или относительную компоновку.
toast.xml
background.xml
background_96 - это background_96.9.png.
Это не очень хорошо протестировано, и подсказки приветствуются :)
источник
Чтобы избежать проблем с неправильным использованием параметров layout_ *, необходимо убедиться, что при расширении настраиваемого макета вы указали правильную ViewGroup в качестве родительского элемента.
Во многих примерах здесь передается значение null, но вместо этого вы можете передать существующую группу Toast ViewGroup в качестве родительской.
Здесь мы заменяем существующее представление Toast нашим настраиваемым представлением. Если у вас есть ссылка на «макет» макета, вы можете обновить любые изображения / текстовые представления, которые он может содержать.
Это решение также предотвращает сбой «Просмотр, не прикрепленный к оконному менеджеру» от использования null в качестве родительского элемента.
Кроме того, избегайте использования ConstraintLayout в качестве корня настраиваемого макета, это не работает при использовании внутри тоста.
источник
Это то, что я использовал
AllMethodsInOne.java
YourFile.java
При звонке просто пишите ниже.
источник
Код для файла MainActivity.java.
Код для файла макета activity_main.xml.
Код для файла макета toast_background_color.xml, созданного в папке res-> layout.
источник
// Пользовательский класс тостов, в котором вы можете отображать пользовательские тосты или тосты по умолчанию по желанию)
источник
Простой способ настроить тост,
источник
Для всех пользователей Kotlin
Вы можете создать расширение, как показано ниже:
источник
Создать свой собственный заказ очень просто.
Toast
.Просто выполните следующие шаги.
Шаг 1
Создайте собственный макет, который вы хотите
Шаг 2
Теперь создайте собственный класс, который расширяется с помощью
Toast
.Мы создали тост на заказ.
Шаг 3
Теперь, наконец, как мы можем это использовать.
Наслаждаться!!
источник
Внимание, обновления тостов в Android 11
В Android R добавлен метод addCallback (), если вы хотите получать уведомления, когда всплывающее сообщение (текстовое или настраиваемое) появляется или исчезает.
Самый важный текст тоста изменений API , что для приложений , которые целевой Android 11 в
getView()
метод возвращает нулевое значение , когда вы к нему доступ, поэтому убедитесь , чтобы защитить свои приложения от к неустранимым, вы знаете , что я имею в виду :)источник
Используя эту библиотеку под названием Toasty, я думаю, у вас достаточно гибкости, чтобы сделать индивидуальный тост следующим образом:
Вы также можете передать форматированный текст в Toasty, и вот фрагмент кода
источник
Ссылка: https://developer.android.com/guide/topics/ui/notifiers/toasts
источник