Как создавать это вью или как им созданным пользоваться?
Если создавать - то создаете разметку в xml, деплоете ее в layouts. Примеров в интернете можно кучу найти. Остальное - в другие папки.
В общем, получится во так.
Здесь задеплоено 3 файла - картинка res/drawable/myicon.png, res/drawable/border.xml - прямоугольник подложки и res/layouts/toast.xml - сам lauoyt.
toast.xml ("-- " - комментарии, удалить надо будет).
Текст, картинки и прочее можем сразу указать в разметке, и грузить автоматически. Но всегда сможем поменять в коде
border.xml
Думаю, тут все понятно. Примитив может быть любой.
И формируем тост:
//uses FMX.Helpers.Android, AndroidApi.Helpers, AndroidApi.JNI.GraphicsContentViewText, Androidapi.JNI.Widget
var
Toast: JToast;
InfObj: JObject;
Inflater: JLayoutInflater;
View: JView;
Text: JTextView;
begin
InfObj := TAndroidHelper.Context.getSystemService
(TJContext.JavaClass.LAYOUT_INFLATER_SERVICE);
Inflater := TJLayoutInflater.Wrap((InfObj as ILocalObject).GetObjectID);
View := TJView.JavaClass.init(TAndroidHelper.Context);
View := Inflater.inflate(TAndroidHelper.Context.getResources()
.getIdentifier(StringToJString('layout/toast'), StringToJString('layout'),
TAndroidHelper.Context.getPackageName), nil); //Грузим из ресурсов. Второе значение всегда nil
Text := TJTextView.Wrap
((View.findViewById(TAndroidHelper.Context.getResources()
.getIdentifier(StringToJString('id/toastText'), StringToJString('id'),
TAndroidHelper.Context.getPackageName)) as ILocalObject).GetObjectID); // Так ищем элементы разметки, если надо свои значения поставить. Так же могли и поменять картинку(id/toastImage), подложку и т.д.
Text.setText(StrToJCharSequence('Привет, х11! Я нативный Toast!' + #13 +
'Сегодня пишем на Pascal')); //Устанавливаем свое значение.
CallInUIThreadAndWaitFinishing( //В сервисе запускаем без этого, отключаем FMX.Helpers.Android - только его, GraphicsContentViewText к графике, которая ломает сервис, отношения не имеет.
procedure
begin
Toast := TJToast.JavaClass.init(TAndroidHelper.Context);
Toast.setView(View); // Своя вьюшка
Toast.setDuration(TJToast.JavaClass.LENGTH_LONG); //Константа. Свое значение не пройдет
Toast.Show; //Показываем
end);
end;
Ну и все в принципе.
Сложного, считаю, 0.
А что не понятно, яндекс показывает, глаза разбегаются.