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

Нативные контролы


A_l_ex

Вопрос

Всем читателям доброго времени суток! 

Есть необходимость поднять нативный контрол. Везде в интернете, и на форуме использован код: 

TJNativeLayout.JavaClass.init(SharedActivity, MainActivity.getTextEditorProxy.getWindowToken);

Исходя из необходимости иметь возможность писать под Android 11 в распоряжении только RAD Studio 10.4.2. 

Начиная с данной версии IDE более не доступен TJNativeLayout из модуля Androidapi.JNI.Embarcadero.

Последняя студия в котором еще доступен данных подход это 10.3.3. 

Возникает вопрос, как теперь поднять нативный контрол?

Вариант который доступен в исходниках, типа: 

FImage: JImageView;


...
var Container: JRelativeLayout;
    param: JRelativeLayout_LayoutParams;
begin 
  Container := TJRelativeLayout.JavaClass.init(TAndroidHelper.Context);  
  FImage := TJImageView.JavaClass.init(TAndroidHelper.Activity);
  params := TJRelativeLayout_LayoutParams.JavaClass.init(100, 100);
  params.addRule(TJRelativeLayout.JavaClass.ALIGN_PARENT_TOP);
  params.addRule(TJRelativeLayout.JavaClass.ALIGN_PARENT_RIGHT);
  params.topMargin := 30;
  params.rightMargin := 30;
  FImage.setLayoutParams(params);
  Container.addView(FImage, params);
end;

Не работает от слова совсем. Хотя магия однозначно есть, ибо как-то же FMX все отрисовывает и выделывает в своих механизмах. 

Есть предположение что это может не работает только под Андройд 8.1? Но с другой стороны код скомпилировался и отработал на ура, но визуально форма черная, пустая и все ...

Так же не увенчалась попытка использовать: 

FChildrenContainer: JViewGroup;

Возможно уже кто-то сталкивался с этим и подскажет что не так?

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

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

  • 0

Вопрос снят. Решение нашлось: 

procedure TForm1.Button1Click(Sender: TObject);
begin
  CallInUIThreadAndWaitFinishing(
  procedure

  function BitmapToJBitmap(const ABitmap: TBitmap): JBitmap;
  var LSurface: TBitmapSurface;
  begin
    Result := TJBitmap.JavaClass.createBitmap(ABitmap.Width, ABitmap.Height, TJBitmap_Config.JavaClass.ARGB_8888);
    LSurface := TBitmapSurface.Create;
    try
      LSurface.Assign(ABitmap);
      SurfaceToJBitmap(LSurface, Result);
    finally
      LSurface.Free;
    end;
  end;

  var AStream: TMemoryStream;
      ABitmap: TBitmap;
      FImage: JImageView;
      Container: JRelativeLayout;
      LP: JRelativeLayout_LayoutParams;
  begin
    AStream := TMemoryStream.Create;
    ABitmap := TBitmap.Create;
    try
      with THTTPClient.Create do begin
        Get('URL до картинки', AStream);
        AStream.Position := 0;
        ABitmap.LoadFromStream(AStream);
        Free;
      end;
      FImage := TJImageView.JavaClass.init(TAndroidHelper.Activity);
      FImage.setLayoutParams(LP);
      FImage.setImageBitmap(BitmapToJBitmap(ABitmap));
      Container := TJRelativeLayout.JavaClass.init(TAndroidHelper.Context);
      LP := TJRelativeLayout_LayoutParams.JavaClass.init(Round(Width * 1), Round(Height * 1));
      LP.addRule(TJRelativeLayout.JavaClass.ALIGN_PARENT_TOP, TJRelativeLayout.JavaClass.TRUE);
      LP.addRule(TJRelativeLayout.JavaClass.ALIGN_PARENT_BOTTOM, TJRelativeLayout.JavaClass.TRUE);
      LP.addRule(TJRelativeLayout.JavaClass.ALIGN_PARENT_LEFT, TJRelativeLayout.JavaClass.TRUE);
      LP.addRule(TJRelativeLayout.JavaClass.ALIGN_PARENT_RIGHT, TJRelativeLayout.JavaClass.TRUE);
      Container.addView(FImage, LP);
      MainActivity.setContentView(Container);
    finally
      AStream.Free;
      ABitmap.Free;
    end;
  end);
end;

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

Добрый день столкнулся тоже с этой проблемой но ваш метод не подходит.

   CallInUIThread(
    procedure
    var
      DM: JDisplayMetrics;
      VideoView: JVideoView;
      //Container: JRelativeLayout;
      //param: JRelativeLayout_LayoutParams;
      NativeLayout: JNativeLayout;
    begin
      DM := GetJDisplayMetrics;
      VideoView := TJVideoView.JavaClass.init(SharedActivity);
      VideoView.setMinimumWidth(DM.widthPixels);
      VideoView.setMinimumHeight(DM.heightPixels);
      VideoView.setVideoPath(StringToJString('http://clips.vorwaerts-gmbh.de/VfE_html5.mp4'));
      VideoView.requestFocus();
      VideoView.start();
      RelativeLayout := JRelativeLayout.JavaClass.init(SharedActivity, MainActivity.getTextEditorProxy.getWindowToken);
      NativeLayout.SetPosition(10, 10);
      NativeLayout.SetSize(300, 300);
      NativeLayout.SetControl(VideoView);
      NativeLayout.SetFocus(true);
    end);

 

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

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

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

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

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

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

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

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

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

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

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