BOXOUT-THINKERS / TiOpenChat

Titanium open source chat mobile messenger app for iOS/Android using BaaS by BOXOUT THINKERS
Other
24 stars 10 forks source link

채팅룸 키보드 이벤트에 관련된 문의 #4

Closed YongHoonYun closed 8 years ago

YongHoonYun commented 8 years ago

안녕하세요 ! 채팅 소스를 기반으로 채팅방을 만들고 있습니다. 헌데 안드로이드에서 키보드 Show/Hide 이벤트시에 문제가 있어서 문의드립니다. _changeContenViewHeight 에서 뒤의 영역을 조절해주시는데요. 안드로이드는 자동조절이라고 설명이 되어있습니다만, adjust 관련하여 사용된 부분이 없으며, 실제로 테스트 했을때, 키보드 Show 상태에서 하드웨어 back 버튼으로 키보드 Hide 시, 어떤 이벤트도 오지 않는 현상이 있습니다. 이 부분을 어떻게 구현하셨는지 궁금합니다. 이벤트가 와야 레이아웃을 조절할텐데.. 해당 부분이 어딘지 모르겠습니다. adjust를 사용한 자동조절 부분도 보이진 않는 것 같습니다.

조언 부탁 드립니다. 감사합니다 !

gimdongwoo commented 8 years ago

안드로이드는 키보드 변화 이벤트가 발생하지 않습니다. Back버튼을 누를때도 keyboard hide는 이벤트가 안생겨요. 대신에 안드로이드는 키보드가 올라올 때 윈도우 자체의 높이가 조절할지, 그냥 전체크기로 둘지 등을 결정할 수 있습니다. http://docs.appcelerator.com/platform/latest/?mobile=/api/Titanium.UI.Window 의 windowSoftInputMode 를 보시면 옵션들이 있습니다. 그래서 키보드가 올라가거나 내려갈때 윈도우 전체의 높이기 변하게 할 수 있어서, 레이아웃을 구성할 때 채팅창은 height가 fill이거나 '100%'로 구성하고 bottom을 textarea 영역의 높이만큼 주고, textarea는 bottom을 0으로 주어서 바닥에 붙여 놓으면 윈도우 사이즈 자체가 조절 될 때 따라가게 되죠.

YongHoonYun commented 8 years ago

windowSoftInputMode 를 적용도 해봤습니다만, 정상적으로 작동하진 않더군요. 제 적용법에 문제가 있을 수 도 있습니다만, 시도해본 내용은 하기와 같습니다.

  1. tss, xml 에 선언된 window 객채 내에 적용시키는 방법
  2. tss, xml 에 선언된 textArea 객채 내에 적용시키는 방법
  3. manifest.xml 에 Android 태그 안의 activity 태그의 파라메터로 적용하는 방법 Alloy를 사용하고 있어서 소스상에서 createTextArea나 createController 를 사용하진 않아서 소스내에서 적용하진 않았습니다.

혹시 사용하신 예시가 있으시다면 공유 가능할까요 ? TiOpenChat에서는 join.tss에서 사용했습니다만, Chatroom에서 inputMode를 사용한 예시는 보이지 않는 것 같습니다.

조언 항상 감사드립니다 ! 수고하세요 !

gimdongwoo commented 8 years ago

tss에 아래 스타일로 적용하는 방법이 맞구요. 사실 기본값이라 적용 안해도 되긴 합니다. 'Window[platform=android]': { windowSoftInputMode: Ti.UI.Android.SOFT_INPUT_ADJUST_RESIZE } 그리고 안드로이드 root 윈도우에서는 동작하지 않습니다. 그래서 키보드가 올라오는 페이지들은 다른 앱들도 대부분 새 윈도우로 동작합니다. 그러니까 필연적으로 채팅방은 윈도우를 만들어서 open하여야 하는데 createController를 안쓰신다고 하여서 어떻게 처리하신건지 궁금하네요. Alloy.createController("...", {...}).getView().open(); 이 가장 많이 쓰이는 방법이니까요. 하지만 윈도우 관리를 위해서 TiOpenChat에서는 Alloy.Globals.openWindow로 감싸서 사용하고 있구요.

YongHoonYun commented 8 years ago

문제점을 찾았습니다. Fullscreen 옵션이 켜져있으면 정상적으로 작동하지 않는군요.. 해당 옵션을 해제하니 Resize 형태로 작동합니다.

조언 감사드립니다.

gimdongwoo commented 8 years ago

Fullscreen은 상단 스테이터스바까지 사라지는 완전한 풀 화면이다보니 다른 액티비티랑 같이 뜨지 않더라구요. 안드로이드는 키보드도 하나의 액티비티라서요. 게임 같은 경우는 기본이 fullscreen을 많이 사용해서 로긴 창이니 쪽지 작성창 같은건 새창으로 띄워서 구현합니다.

YongHoonYun commented 8 years ago

아직 익숙하지 않은 탓인지 실수들을 좀 하네요..ㅠ 푸쉬 관련된 문의가 하나 더 있는데 다른 이슈로 올리겠습니다. 감사합니다 ㅎ