2014-09-16 2 views
3

저는이 구현에 조금 어려움을 겪고 있습니다. 나는 첫 번째 Hello World를 만들고있다! 사용자가 뒤로 버튼이나 다른 입력을 클릭 할 때와 같이 키보드를 항상 표시하고 숨기는 것을 방지하는 Android (cordova) 응용 프로그램.
왜? 기본적으로 내 HTML에 포커스를 트리거하는 입력 요소가 없습니다 & 키보드 표시, 사용자가 특정 명령을 수행하는 '터미널 에뮬레이터'의 일종입니다. 키보드가 전혀 표시되지 않는 한
그래서 내가 가서 나는 다음과 같은 추가 :키보드가 닫히는 것을 막으십시오.

설치된 이온 키보드 플러그인

cordova plugin add https://github.com/driftyco/ionic-plugins-keyboard.git 

추가 권한이

<feature name="Keyboard"> 
    <param name="android-package" value="com.ionic.keyboard.IonicKeyboard" /> 
    <param name="onload" value="true" /> 
</feature> 
의 Config.xml하기

내 앱 모듈에 다음 줄이 있습니다.

var myApp = angular.module('myApp', ['ionic']); 

myApp.run(function($ionicPlatform) { 
    $ionicPlatform.ready(function() { 

     if(window.cordova && window.cordova.plugins.Keyboard) { 
      window.cordova.plugins.Keyboard.show(); // Show Keyboard on startup 

// and here Trigger a show keyboard when hidden 
      window.addEventListener('native.hidekeyboard', keyboardHideHandler); 

      function keyboardHideHandler(e){ 
       window.cordova.plugins.Keyboard.show(); 
      } 

     } 
    }); 
}); 

이제 위의 구현이 작동하지만이 방법으로 처리하는 것이 우아하지 않다고 생각하며 키보드가 닫힌 후 다시 팝업되는 느낌을 좋아하지 않습니다.

  • 키보드를 항상 표시하도록 안드로이드 앱을 구성 할 수있는 이온 키보드의 플러그인 외에 다른 방법이 있습니까?
  • Cordova/Ionic 프레임 워크를 사용하는 올바른 방법입니까?

희망 나는 올바른 track.Any 힌트에 있습니다.

스크린 샷

enter image description here

+0

안드로이드 장치에서 "ios-package"이유. config.xml을보십시오 –

+0

Mohammad를 지적 해 주셔서 고맙습니다. 그러나, Keyboard.show() 호출; 어느 쪽의 방법이라도 작동한다 – Awena

답변

4

편집 감사합니다 https://stackoverflow.com/a/1510005/1091751 : 나는 그것을 할 수있는 표준적인 방법이 여기라고 생각합니다.

@Override 
public boolean onKeyPreIme(int keyCode, KeyEvent event) { 
    if(keyCode == KeyEvent.KEYCODE_BACK && event.getAction() == KeyEvent.ACTION_UP) { 
     InputMethodManager manager = (InputMethodManager) this.getContext().getSystemService(Context.INPUT_METHOD_SERVICE); 
     manager.toggleSoftInput(0, InputMethodManager.SHOW_FORCED); 
    } 
    return false; 
} 

I의 천국 다음 BACK 버튼은 그러나 눌렀을 때 이 다음 (https://stackoverflow.com/a/6571093/1091751에서 가져온) 메소드를 오버라이드 (override) 할 platforms/android에서 실제 코르도바 안드로이드 파일을 편집 해 낼 수 닫는 것을 방지하지 않습니다 이것을 테스트하지는 않았지만, 앱이로드 될 때 처음에 초점을 맞춘 숨겨진 입력을 추가 한 다음 포커스를 잃었을 때 지속적으로 초점을 다시 맞추면 어떻게 될까요? keyboard.show()를 명시 적으로 호출하는 것과 다를 것이 확실하지 않지만 키보드 열기/닫기 지터를 방지 할 수 있습니다.

뭔가 같은 :

<input constant-focus id="hiddenFocus" type="hidden"> 

다음

document.getElementById('hiddenFocus').focus() 

다음 일정까지 키보드를 유지하는 데 집중할 = // HTML 태그 constant-focus

.directive('constantFocus', function(){ 
     return { 
     restrict: 'A', 
     link: function(scope, element, attrs){ 

      element[0].addEventListener('focusout', function(e){ 
      element[0].focus(); 
      }); 
     } 
     }; 
    }) 
+0

안녕하세요 Tim는 우리가 같은 시간에 게시했던 것처럼 보인다 :) 확실히 나는 그것을 지금 시험해 볼 것이다. 아래에 대해 어떻게 생각하십니까? – Awena

+0

필자의 경우 입력기가 작동하지 않습니다. 사용중인 jquery 터미널 플러그인과 관련이있을 수 있습니다. 당신의 대답은 나에게 꽤 논리로 보입니다. 나는 많은 게시물에서 발견 한 것과 같은 제안입니다. 내 최후의 수단이 코도 바를 무시하는 것 같아 .. 감사합니다. 팀! – Awena

+1

행운을 빌어 요! 키보드는 변덕 스러울 수 있습니다. 어떤 성공이라도 있으면 다시 게시하십시오. – user1234

0

글쎄, 나는 내가 다른 방법을 생각해 냈다고 생각해. 아직도 이것이 어떻게해야하는지 모르겠다. 전자 처리. 키보드 가까이 보이는 경우


다른

$scope.reportEvent = function (event) { 
     if (event.type == 'doubletap') { 
      $timeout(function() { 
       if (window.cordova && window.cordova.plugins.Keyboard) { 
        if(cordova.plugins.Keyboard.isVisible){ 
         window.cordova.plugins.Keyboard.close(); 
        } else { 
         window.cordova.plugins.Keyboard.show(); 
        } 

       } 
      }, 500); 
     } 
     }; 

이 나를 어떻게 생각하는지 보자보기, 내 컨트롤러에 도청

다음
myApp.directive('detectGestures', function ($ionicGesture) { 
    return { 
    restrict: 'A', 
    link: function (scope, elem, attrs) { 
     var gestureType = attrs.gestureType; 
     switch (gestureType) { 
      case 'doubletap': 
       $ionicGesture.on('doubletap', scope.reportEvent, elem); 
       break; 
    }}} 
}); 

에 이벤트 리스너를 추가합니다.
감사합니다.

+0

흠, 주된 문제는 키보드를 닫은 다음 다시 열기 시작한 것이라고 생각합니다.이 경우에는이 문제를 해결할 수 있는지 잘 모르겠습니다. ? – user1234

관련 문제