FeLDMARShaL

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

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

Коллеги. Я верю в коллективный разум. Требуется изменить визуально индикатор прогресса. Для этого к проекту необходимо подгружать стили. За основу я взял тему 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 - это именно штатная тема приложения, которая многими меняется)

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


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

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

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

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

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

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

Войти

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

Войти


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

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