Показывать сразу два тостовых сообщения?

Я хочу, чтобы одно сообщение Toast отображалось в одном месте, а другое сообщение Toast отображалось одновременно в другом месте.

  1. Кажется, что несколько сообщений Toast всегда выстраиваются в очередь и отображаются по порядку. Можно ли показывать оба сообщения одновременно?

  2. Есть ли обходной путь, который, по крайней мере, дает такой вид и не связан с изменением макета действия?

Изменить: Похоже, ответ на первый вопрос отрицательный, это невозможно. Как насчет обходного пути? Решение для меня будет включать что-то, что появляется «поверх» приложения, например Toast, и не мешает взаимодействию пользователя с приложением (то есть не AlertDialogue или что-либо, что вызывает onPause () и т. Д.).


person gotube    schedule 23.03.2014    source источник
comment
В любом случае, вероятно, было бы не лучшим вариантом для пользователя показывать их оба одновременно.   -  person donfuxx    schedule 23.03.2014
comment
Если только вы не Косоглазая Мэри ... или Хамелеон   -  person Phantômaxx    schedule 23.03.2014
comment
Приложение предназначено для использования, когда устройство находится на плоской поверхности в окружении пользователей. Два сообщения содержат одинаковые слова, но одно находится внизу, а другое - umop apisdn вверху, поэтому люди, смотрящие на приложение под другим углом, могут легко его прочитать.   -  person gotube    schedule 25.03.2014
comment
Можно ли показывать оба сообщения одновременно? НЕТ. Это уже не так. Возможно, API в 2014 году не позволял этого, но сейчас по умолчанию все наоборот.   -  person francogrex    schedule 16.07.2019
comment
@francogrex Не могли бы вы объяснить, как это делается сейчас? API не сильно отличается от 2014   -  person gotube    schedule 17.07.2019


Ответы (2)


Как сказал Джей Патель, это невозможно. Но есть обходной путь ЕСТЬ! Вы можете создать собственный Toast, который может содержать любые View. Это означает, что у вас может быть макет с двумя сообщениями в разных местах внутри одного тоста.

Вы можете узнать, как это сделать, здесь или вы можете начать прямо с этого фрагмента:

LayoutInflater inflater = getLayoutInflater();
View layout = inflater.inflate(R.layout.custom_toast,
                           (ViewGroup) findViewById(R.id.toast_layout_root));

TextView text = (TextView) layout.findViewById(R.id.text);
text.setText("This is a custom toast");

Toast toast = new Toast(getApplicationContext());
toast.setGravity(Gravity.CENTER_VERTICAL, 0, 0);
toast.setDuration(Toast.LENGTH_LONG);
toast.setView(layout);
toast.show();
person Firzen    schedule 27.06.2015
comment
На данный момент это работает, но метод setView () устарел на уровне API 30. - person Preston McCormick; 15.07.2020

Короткий ответ, нет, ты не можешь

Вы не можете одновременно показывать 2 Toast. Я уверен в этом, я уже пробовал, но могу показать только один тост.

Но если вы действительно хотите отображать два тоста одновременно, вы установите механизм потоков, чтобы они отображались один за другим в одном и том же месте.

person Jay Patel    schedule 23.03.2014