Равиль Зарипов (ZuBy)

пару вопросов по работе ActionSheet

В теме 12 сообщений

Пока писал вопросы, один решил

 

1) Создание динамически элементов получилось так:

var
  fgItem: TfgActionCollectionItem; // uses FGX.ActionSheet.Types
begin
  fgItem := fgActions.Actions.Add as TfgActionCollectionItem;
  fgItem.Caption := 'Контакты';
  fgItem.OnClick := OnClickProc;
end;

2) Как можно поменять шрифт? (я использую FontAwesome)

post-59-0-39224100-1452180612_thumb.png

 

3) Как отловить закрытие?

 

P.S. В качестве идеи/бреда, для десктопов можно было использовать TPopupMenu как основу

Изменено пользователем ZuBy

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
  1. В следующей версии я как раз планировал добавить событие OnClose и OnShow
  2. Подумаю на счет Windows и OSX реализации
  3. В текущей реализации, только при помощи правок исходников. Обсуждение тут

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
  1. В следующей версии я как раз планировал добавить событие OnClose и OnShow
  2. Подумаю на счет Windows и OSX реализации
  3. В текущей реализации, только при помощи правок исходников. Обсуждение тут

долго ли ждать следующую версию?

на счёт шрифта, спасибо. завтра попробую

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
  1. В следующей версии я как раз планировал добавить событие OnClose и OnShow

Ярослав, прошу попутно зацепить ImageList...

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Дело в том, что в iOS и в андроиде в стандартном варианте нету картинок. Но вообще мне кажется, что для андроида ActionSheet должен быть в виде попапа... 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

 

  1. В следующей версии я как раз планировал добавить событие OnClose и OnShow

Ярослав, прошу попутно зацепить ImageList...

 

Как сказали уже картинки нельзя прикрутить, нативно они не поддерживаются.

Поэтому хочу использовать шрифт FontAwesome только нужно допилить немного, чтобы шрифт грузился

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Помогите добрым советом

 

Вот что получается

unit FGX.ActionSheet.Android;

дописываем метод Show

procedure TAndroidActionSheetService.Show(const ATitle: string; Actions: TfgActionsCollections;
  const UseUIGuidline: Boolean = True);
var
  DialogBuilder: JAlertDialog_Builder;
  dialog: JAlertDialog;
  Items: TJavaObjectArray<JCharSequence>;

  // ................
  TextView: JTextView; // uses Androidapi.JNI.Widget
  Typeface: JTypeface;
  FontFile: string;
  // ................
begin
  AssertIsNotNil(Actions);

  FActions := Actions;

  { Create Alert Dialog }
  if TOSVersion.Major <= 2 then
    DialogBuilder := TJAlertDialog_Builder.JavaClass.init(TAndroidHelper.Context)
  else
    DialogBuilder := TJAlertDialog_Builder.JavaClass.init(TAndroidHelper.Context, GetNativeTheme);

  // ................
  { Пытаемся загрузить шрифт }
  FontFile := TPath.Combine(TPath.GetDocumentsPath, 'FontAwesome.ttf');
  if FileExists(FontFile) then // выдает, что найден
  begin
    Typeface := TJTypeface.JavaClass.createFromFile(StringToJString(FontFile)); // пытаемся загрузить шрифт
    TextView := TJTextView.JavaClass.init(TAndroidHelper.Context); // создаем TextView
    TextView.setText(StrToJCharSequence(' ' + widechar($F085) + ' options')); // выводим посмотреть что получилось
    TextView.setTypeface(Typeface); // эту строчку забыл добавить!!!
    DialogBuilder.setView(TextView); // присваиваем нашему диалогу TextView
  end;
  // ................

  { Forming  Action List }
  Items := ItemsToJavaArray;
  if not ATitle.IsEmpty then
    DialogBuilder.setTitle(StrToJCharSequence(ATitle));
  DialogBuilder.setItems(Items, FListener);
  DialogBuilder.setCancelable(True);

  CallInUIThread(
    procedure
    begin
      dialog := DialogBuilder.Create;
      dialog.Show;
    end);
end;

в итоге получается вот такое

post-59-0-95853800-1452333007_thumb.png

 

UPDATE: получилось присвоить TextView шрифт, забыл присвоить Typeface

post-59-0-63096000-1452336108_thumb.png

 

Что я делаю не так?

Как теперь добавленным item'ам применить новый Typeface?

Изменено пользователем ZuBy

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

У AlertDialog итемы реализованы в котроле ListVIew. Поэтому нужно просто получить ListVIew через http://developer.android.com/intl/ru/reference/android/app/AlertDialog.html#getListView() и присвоить ему шрифт

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Еще есть вариант просто сделать свой стиль диалогового окна и подсунуть его с нужным шрифтом. Тогда будет проще, но придется самому стиль сделать. Так же исходник стиля можно взять с исходников Android SDK

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

У AlertDialog итемы реализованы в котроле ListVIew. Поэтому нужно просто получить ListVIew через http://developer.android.com/intl/ru/reference/android/app/AlertDialog.html#getListView() и присвоить ему шрифт

уже копался тут, не понял куда именно вставить setTypeface...

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Еще есть вариант просто сделать свой стиль диалогового окна и подсунуть его с нужным шрифтом. Тогда будет проще, но придется самому стиль сделать. Так же исходник стиля можно взять с исходников Android SDK

в этом придётся долго разбираться...

 

кодом ведь почти получилось, только нужно понять куда в JListView присвоить свой Typeface

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Для публикации сообщений создайте учётную запись или авторизуйтесь

Вы должны быть пользователем, чтобы оставить комментарий

Создать учетную запись

Зарегистрируйте новую учётную запись в нашем сообществе. Это очень просто!

Регистрация нового пользователя

Войти

Уже есть аккаунт? Войти в систему.

Войти


  • Похожий контент

    • От gresaggr
      Добрый день.
      Как под FMX в ListView сделать подчеркивание Detail в рантайме?
      Пытался делать так:
      LV.ItemAppearanceObjects.ItemObjects.Detail.Font.Style := [TFontStyle.fsUnderline]
      но не срабатывает.
      P.S. Возможно это применить не ко всем строкам, а только к некоторым?
    • От Виталий Иванов
      Ошибка при запуске программы на отладку:
       
      "
      Can't open socket: Permission denied 
      Exiting
      .
      "
       
      кто знает как побороть ? 
       
      Отладку запускаю на OnePlus3 с Android 8.0.0, драйвера Google USB переустанавливал. 

    • От dim
      Есть код который работает при смещении карты и получив координаты центра пытаюсь получить адрес по ним.
      procedure TMasterDetailForm.MapView3CameraChanged(Sender: TObject); var myCoordinat: TLocationCoord2D; begin inherited; myCoordinat.Create(MapView3.Location.Latitude,MapView3.Location.longitude); if (int(myCoordinat.Latitude)<>0) then begin //проверяю, что координаты определены if not Assigned(fGeocoder) then begin if Assigned(fGeocoder.Current) then fGeocoder := TGeocoder.Current.Create; if Assigned(fGeocoder) then fGeocoder.OnGeocodeReverse := OnGeocodeReverseEventStart; end; if Assigned(fGeocoder) and not fGeocoder.Geocoding then fGeocoder.GeocodeReverse(myCoordinat); end end; все работало до очередного обновления, а сейчас ругается "java.io.IOException: Service not Available" на fGeocoder.GeocodeReverse(myCoordinat);
      подскажите куда копать
    • От striker
      Всем привет!
      Нужен совет.
      Есть Grid, в нем расписание дня.
      В БД каждая строка это отдельная запись.
      Нужно как-то визуально сделать подобие объединения ячеек в Excel.
      Т.е. нужно занять расписание на 2 часа.
      При этом функционал по событиям для строки "второго часа" должен быть недоступен.
      Может хотя бы границу стирать, т.е. оставлять значение в верхней ячейки, а нижнюю просто не отображать.
      Как это лучше сделать?
      FMX, Windows, Delphi XE6, MySQL
       

    • От Roman V
      Всем привет. Учусь работать с ini-файлами на Android. И сразу же возникла проблема, которую никак не могу решить. Хотел написать подобие приложение-тест с хранением данных в ini файле. В итоге все отлично работает на windows,а под Андроид при запуске висит только значок firemonkey секунд 10 и приложение вырубается так и не запустившись. В чем может быть проблема? Использую отладку по USB. 
      TIniFile *Ini = new TIniFile(System::Ioutils::TPath::GetDocumentsPath() + PathDelim + "options.ini"); Юзаю эти библиотеки 
      #include <System.IOUtils.hpp> #include <System.IniFiles.hpp>  
    • От Rustam Bikeev
      Суть проблемы следующая: после перехода с одной вкладки на другую в tabcontrol страница не отображается, фактически она переключается но на экране отображается предыдущая вкладка с которой был переход, ровно до той поры пока на что нибудь не клацнешь, нужно либо нажать на кнопку в тулбаре либо открыть multiview. После того как я первый раз с этим столкнулся я так и делал программно открывал и закрывал multiview, но не могу же я так делать постоянно, нужно решить проблему. Для подробности напишу, что есть основной tabcontrol в котором вкладки открываются из multiview, во вкладках есть вложенные tabcontrol-ы, со своими страницами в основном по 2 страницы. 
      Зря я начал делать приложения в делфи... чем дальше в лес тем больше дров.
    • От Alex7wrt
      Добрый день
      Как заставить TMediaPlayer воспроизводить MPG файлы под Windows? MP4 воспроизводит, а mpg не хочет. Установлены кодеки KLite.
      Добавление строки 
      TMediaCodecManager.RegisterMediaCodecClass('.mpg', 'MPEG Video', TMediaType.Video, TWindowsMediaCodec); не помогает. 
    • От x11
      Нет ли у FMX готовой функции для открытия веб-ссылок из приложения?
      А то приходится городить огород с лисапетами и кучей IFDEF.
      В итоге что у меня получилось.
      Для удобства разнес все по разным модулям.
      Модуль для Windiws
      unit uUtilsWindows; interface {$IFDEF MSWINDOWS} uses ShellApi, Variants, Windows, FMX.Types, FMX.Platform.Win; procedure WindowsOpenUrl(const sUrl: string; WindowHandle: TWindowHandle); {$ENDIF} implementation {$IFDEF MSWINDOWS} procedure WindowsOpenUrl(const sUrl: string; WindowHandle: TWindowHandle); begin ShellExecute(FmxHandleToHWND(WindowHandle), 'open', PChar(VarToStr(sURL)), nil, nil, SW_NORMAL); end; {$ENDIF} end.  
      Модуль для Android
      unit uUtilsAndroid; interface {$IFDEF ANDROID} uses FMX.Helpers.Android, Androidapi.JNI.Net, Androidapi.JNI.GraphicsContentViewText, AndroidApi.Helpers; procedure AndroidOpenUrl(const sUrl: string); {$ENDIF} implementation {$IFDEF ANDROID} procedure AndroidOpenUrl(const sUrl: string); Var Uri: Jnet_Uri; OpenLinkIntent: JIntent; begin Uri := StrToJURI(sUrl); OpenLinkIntent := TJIntent.JavaClass.init(TJIntent.JavaClass.ACTION_VIEW, Uri);// будем что-то смотреть OpenLinkIntent.addCategory(TJIntent.JavaClass.CATEGORY_BROWSABLE);// смотреть в браузере OpenLinkIntent.setData(Uri);// смотреть эту ссылку SharedActivity.startActivity(OpenLinkIntent);// открываем end; {$ENDIF} end.  
      теперь в основной форме:
      uses ..., ...{$IFDEF ANDROID}, vkbdhelper, uUtilsAndroid{$ENDIF} {$IFDEF MSWINDOWS}, uUtilsWindows {$ENDIF}; ... ... ... procedure TfmEditObject.actOpenUrlExecute(Sender: TObject); begin {$IFDEF ANDROID}AndroidOpenUrl(edMapsCoordUrl.Text);{$ENDIF} {$IFDEF MSWINDOWS}WindowsOpenUrl(edMapsCoordUrl.Text, Self.Handle);{$ENDIF} end;  
      А если добавлять ещё одну платформу, то ещё один модуль понадобится.
      Может есть более правильный вариант, так сказать, дизайна исходного кода?
       
    • От SerhioUser
      Добрый день.
      Как в FMX при перерисовке объекта включить/отключить привязку к вертикальной синхронизации (v-sync) развертки экрана? Есть ли такая возможность в FMX? (В OpenGL и DirectX - есть)
      Например если делаем видео-плеер, то чтобы не было артефактов синхронизация нужна, а если хотим узнать реальный fps - синхронизацию выключаем.
  • Последние посетители   0 пользователей онлайн

    Ни одного зарегистрированного пользователя не просматривает данную страницу