Перейти к содержанию
Fire Monkey от А до Я

Изменение стиля TfgActivityDialog №2


FeLDMARShaL

Рекомендуемые сообщения

Коллеги. Я верю в коллективный разум. Требуется изменить визуально индикатор прогресса. Для этого к проекту необходимо подгружать стили. За основу я взял тему http://manjunath4android.blogspot.ru/2015/12/display-progress-dialog-without-text.html

Будем менять индикатор на тот который указан в теме. Что было сделано с моей стороны:

1) Прилинковал все необходимые фалы к нашему проекту

 5a30e6433a4eb_.thumb.PNG.22aecb3f3b6a5bd60be229070f34c4ff.PNG

2) Проконсультировался с разработчиком компонентов :) Полазил по исходникам, в результате чего понял что поменять стиль в текущей реализации уже должно получится. Для этого есть 2 свойства у класса TfgActivityDialog: Theme и ThemeID.

Если со свойством Theme все понятно, его необходимо задать как TfgDialogTheme.Custom, то с ThemeID не так все просто. На просторах интернета нашел что это такое (R.layout.my_progress) и вроде бы  даже перевел на Pascal: TAndroidHelper.Context.getResources.getIdentifier(StringToJString('my_progress'), StringToJString('layout'), TAndroidHelper.Context.getPackageName), но в конечном итоге имеем вот это:

device-2017-12-13-154622.thumb.png.a4d7f52d729ce455908538ac9ad86308.png

А ожидается вот это:

Screenshot_2015-12-18-12-18-23-053.thumb.jpeg.349d7969cfe2d5ca2496f5d9cbb9d89e.jpeg

 

На кнопку которая должна отобразить индикатор активности повесил вот такой код:

procedure TmainForm.Button1Click(Sender: TObject);
var
  fg: TfgActivityDialog;
  themId: Integer;
begin

  themId := TAndroidHelper.Context.getResources.getIdentifier(StringToJString('my_progress'),
        StringToJString('layout'), TAndroidHelper.Context.getPackageName);

  fg := TfgActivityDialog.Create(Self);

  try

    if themId<>0 then
    begin
      fg.Theme := TfgDialogTheme.Custom;
      fg.ThemeID := themId;
      fg.Title := 'Title';
      fg.Message := 'Message';
      Button1.Text := 'TfgDialogTheme.Custom'
    end
    else
      Button1.Text := 'TfgDialogTheme.Auto';

    fg.Show;
    sleep(3000);
    fg.Hide;

  finally
    FreeAndNil(fg);
  end;

end;

 

Ссылка на комментарий
  • Администраторы

Судя по официальной доке по кастомизации диалога: https://developer.android.com/guide/topics/ui/dialogs.html?hl=ru#CustomLayout нужно именно создать тему, а не стиль. 

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

Надо посмотреть тут: http://developer.alexanderklimov.ru/android/theme.php про темы в андроиде. И попробовать сделать именно тему со стилем диалога. И потом ее уже применить. Это должно сработать.

Ссылка на комментарий

После упорных попыток, не получилось подружить компонент с созданной темой, возможно ее ид как то не так получаю и ниже приведенный код возвращает что то не то :(

themId := TAndroidHelper.Context.getResources.getIdentifier(StringToJString('styles_dialog'),
        StringToJString('layout'), TAndroidHelper.Context.getPackageName)

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

const UndefinedThemeID = -1;

Теперь компоненты считаю что ThemeID=0 - это кастомная тема.

После чего, вот такой код (и измненная стандартная тема приложения):

  if not Assigned(fg_my) then
  begin
    fg_my := TfgActivityDialog.Create(nil);
    fg_my.Theme := TfgDialogTheme.Custom;
    fg_my.ThemeID := 0;
  end;

  fg_my.Show;
  sleep(3000);
  fg_my.Hide;

Приводят вот к такому результату (разумеется индикатор крутится как надо):

device-2017-12-19-141722.thumb.png.dcdd2d99807a6a1a130bde278811316b.png

Ссылка на комментарий

Думаю тема стилизации этого индикатора раскрыта не полностью, но на текущий момент мне этого хватит. Было бы круто если значение переменной  UndefinedThemeID=-1 перекочевало в основную ветку (т.к. тема со ид равным 0 - это именно штатная тема приложения, которая многими меняется)

Ссылка на комментарий

Присоединяйтесь к обсуждению

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

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

  • Последние посетители   0 пользователей онлайн

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