FireMonkey 예제 자료

FireMonkey 갤럭시워치4(Wear OS) Edit 내용 작성하기 위해 클릭시 에러 뜨는 현상(임시 조치)

kimsyo11 2022. 5. 14. 04:01
728x90

이번 갤럭시 워치4는 알다시피 Wear OS의 안드로이드 기반이다

그러나 파이어몽키의 Edit를 추가하고 빌드하고 내용을 작성하기 위해 클릭했더니

아래의 사진처럼 에러가 뜨는 현상이 발생한다 그럴때 해결하는 방법은 아래에 있다

해결 방안

TEdit의 ControlType속성을 Platform으로 변경함으로써 Android기본 컨트롤에는 바뀌게 된다

Edit1.ControlType := TPresentedControl.TControlType.Platform 로 변경하셔도 되고 또는

 

직접 변경 해줘도 된다

 

필자는 좀더 특이하게 해보려 했지만 위가 더 심플하고 아래에는 숙제에 해당이 되는것 같다

edit_text.xml의 파일을 작성하고 파이어몽키의 리소스 레이아웃 폴더에 넣어 해당 EditText를 컨텐트뷰하여 내용을 가져오는 방식을 하려 했다.

작성한 edit_text.xml파일은 해당 앱 res/layout에 들어간다

그럼 아래의 코드를 짜보았다

1순위로 edit_text.xml의 레이아웃 setContentView를 해줘야 한다

setContentView하자마자 해당 edit_text.xml 내용의 레이아웃이 화면에 표시가 된다

그후 2순위로 해당 EditText의 내용갖고 오기 위해

델파이 코드 LayoutID1 변수 처리에는 edit_text의 android:id="@+id/edit_text"<<를 했기 때문에 해당 LayoutID1 번지수를 잘 찾을수 있게 된것이고

 
 

그후 JEditText의 자바의 EditText로 뜻하기도 하며 위치를 특정 해준다

FindViewById의 아까 찾은 LayoutID1를 넣어주고 정보를 얻는다

그후 getText의 tostring하면 해당 xml의 android:text 내용이 고대로 갖고와서 출력이 되는것을 볼수가 있다

또는 앱 자체에서 EditText에 다르게 작성해도 잘나온다

※ 워치에서도 테스트 잘 되지만 스마트폰이 유선 케이블 연결이 빨라서 폰 캡처를 하였다.

 
 

그러면 xml에 작성한 EditText의 클릭 이벤트는 어떻게 하냐면 쉽게 이벤트를 대입 시켜주면 된다

아래의 본인이 작성한 코드 대입을 시켜주면 된다

KMSClcikEvent = class(TJavaLocal,JView_OnClickListener)
  private
    ClickTmp : TProc;
  public
    constructor Create(const Tmp : TProc);
    procedure onClick(v: JView); cdecl;
  end;

var   EdtClickEvent : JView_OnClickListener;

constructor KMSClcikEvent.Create(const Tmp : TProc);
begin
  inherited Create;
  ClickTmp := Tmp;
end;

procedure KMSClcikEvent.onClick(v: JView); cdecl;
begin
  ClickTmp;
end;

procedure test;
var
  LayoutID, LayoutID1: Integer;
begin
  LayoutID := TAndroidHelper.Activity.getResources.getIdentifier(
    TAndroidHelper.StringToJString('edit_text'),
    TAndroidHelper.StringToJString('layout'),
    TAndroidHelper.Activity.getPackageName()
  );

  TAndroidHelper.Activity.setContentView(LayoutID); // 레이아웃 연결 고리

  LayoutID1 :=  TAndroidHelper.Activity.getResources.getIdentifier(
    TAndroidHelper.StringToJString('edit_text'),
    TAndroidHelper.StringToJString('id'),
    TAndroidHelper.Activity.getPackageName()
  );
  var lText: JEditText;
   lText:= TJEditText.Wrap((TAndroidHelper.Activity.findViewById(LayoutID1) as ILocalObject).GetObjectID); // dEditText의 값 내용 가져오기 위해 오브젝트 id 입력

EdtClickEvent := KMSClcikEvent.Create(procedure
  begin
    ShowMessage('테스트중입니다');
  end);

  lText.setOnClickListener(EdtClickEvent);
end;
​
728x90