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

Поменять цвет статус бара Delphi [XE7] - Android


Satellite

Вопрос

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

  • 0
  • Модераторы

я пробовал решить это, но тут Делфи ругается если в исходники начинаешь что-то дописывать...

 

по сути, если я правильно понимаю, нужно всего-то добавить в интерфейсы пару строк и тогда мы сможем менять цвет.

unit Androidapi.JNI.GraphicsContentViewText;

 JWindowManager_LayoutParamsClass = interface(JViewGroup_LayoutParamsClass)
   ['{677013A8-C0C6-4ED2-83EA-188BF4D1331A}']
   ....
   {class} function _GetFLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS: Integer; cdecl;
   {class} property FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS: Integer read _GetFLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS ; 
   ....


 [JavaSignature('android/view/Window')]
  JWindow = interface(JObject)
    ['{A9AC44DA-219C-41C4-AD29-88B01254819E}']
    ....
    procedure setStatusBarColor(color: Integer); cdecl;
    ....

после объявления этих методов нужно примерно такое вызвать

procedure SystemBarSetColor;
var
 Window: JWindow;
begin
 Window := MainActivity.getWindow;
 Window.clearFlags(TJWindowManager_LayoutParams.JavaClass.FLAG_TRANSLUCENT_STATUS);
 Window.addFlags(TJWindowManager_LayoutParams.JavaClass.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS); 
 Window.setStatusBarColor(цвет указываем);
end;

на java это выглядит так
 // Window window = activity.getWindow();
 // window.clearFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS);
 // window.addFlags(WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS);
 // window.setStatusBarColor(activity.getResources().getColor(R.color.example_color));

ругается на разность скомпилированных файлов...

Изменено пользователем ZuBy
Ссылка на комментарий
  • 0

ну правильно, так ты в свой проект подкинь файлов на которые ругается, там будет их около 5-10. 

 

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

Изменено пользователем haword
Ссылка на комментарий
  • 0
  • Модераторы

ну правильно, так ты в свой проект подкинь файлов на которые ругается, там будет их около 5-10. 

 

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

не угадал, там нужно все файлы перекомпилировать из папки rtl и половину source...

не охото этим заниматься

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

я так понял ты даже не проверял :)

 

нужны всего лишь

 

Androidapi.Helpers.pas
Androidapi.JNI.AdMob.pas
Androidapi.JNI.App.pas
Androidapi.JNI.Embarcadero.pas
Androidapi.JNI.GraphicsContentViewText.pas
Androidapi.JNI.Location.pas
Androidapi.JNI.PlayServices.pas
Androidapi.JNI.Support.pas
Androidapi.JNI.Webkit.pas
FMX.FontGlyphs.Android.pas
FMX.Graphics.Android.pas
FMX.Helpers.Android.pas
FMX.Maps.Android.pas
FMX.Pickers.Android.pas
FMX.Platform.Android.pas
FMX.VirtualKeyboard.Android.pas
FMX.WebBrowser.Android.pas
 
и все компилируется, только цвет не меняет на указанный. зависала программа если делать при создании формы. сделал в dpr
 
uses
  System.StartUpCopy,
  FMX.Forms,
  Androidapi.Helpers,
  System.UITypes,
  Androidapi.JNI.GraphicsContentViewText,
  Unit1 in 'Unit1.pas' {Form1};
 
{$R *.res}
 
 var
    Window: JWindow;
 
begin
  Application.Initialize;
    Window:= SharedActivity.getWindow;
    Window.addFlags(TJWindowManager_LayoutParams.JavaClass.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS);
    Window.clearFlags(TJWindowManager_LayoutParams.JavaClass.FLAG_TRANSLUCENT_STATUS);
    Window.setStatusBarColor(TAlphaColors.Cyan);
 
  Application.CreateForm(TForm1, Form1);
  Application.Run;
end.
 
 
цвет шапки белый и хоть за заменяйся цвет. 
Ссылка на комментарий
  • 0

Да, тоже столкнулся с тем, что цвет становиться белым и не меняется.

Вот версия без необходимости менять исходники.

SystemBar.zip

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

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

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

я даже сделал через Window.setStatusBarColor(TJColor.JavaClass.parseColor(StringToJString('red'))); все равно белый. 

 

видно это работает для java и не работает для ndk или работает но как то по другому. может что то со стилями надо делать или в манифесте. 

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

Возможно это работает также как и для IOS...

 

У меня получилось

post-59-0-55615600-1454389951_thumb.png post-59-0-35860000-1454389959_thumb.png

post-59-0-59857400-1454389966_thumb.png

 

Код не изменился, изменения были в форме...

Нужно задать цвет

Form1.Fill.Color := TAlphaColorRec.Red;

Посередине я поставил Rectangle, чтобы цвет контента не был равен цвету форме.

и снизу стоит Rectangle с черным цветом, т.к. у меня наэкранные кнопки.

если убрать нижняя панель тоже покрасится.

 

И теперь вопрос, кто знает как определить высоту наэкранных кнопок и их существование?

 

P.S. Кривяков Виталий спасибо за модуль

Изменено пользователем ZuBy
Ссылка на комментарий
  • 0
  • Модераторы

то есть форма должна быть того цвета чем закрашивается заголовок?

да, код делает только полупрозрачность... точней нам доступно только это.

форма становится фулл скрин и мы видим наложение полупрозрачности и фона нашей формы

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

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

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

посмотрите внимательно как сделаны родные приложения google в материале, убедитесь что все так как я предложил.

если нет возможности, могу показать у меня Android 6.0 Marshmallow

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

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

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

Гость
Ответить на вопрос...

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

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

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

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

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

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

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