2016-05-10 7 views
5

私はアンドロイドのソフトキーボードネイティブでなければならない同じ空間でビューを表示できるカスタムビューを持っています。Androidは同時に表示と非表示のキーボードを表示します。奇妙な行動

キーボードを開いてボタンをクリックし、キーボードを非表示にして、キーボードが同じ場所に他のビューを表示する必要があります。

私はこれを現在、キーボードを隠してカスタム表示を表示していますが、奇妙な振る舞いと最小の遅れと重なりがあります。

誰かに同様のものを実装しましたか?

+0

チェック[この](http://stackoverflow.com/a/1109108/4790490) – Hearty

+0

は、F君をやっ役に立つかもしれませんそれをigure?私は同じことをする必要があります。 – sidon

+0

質問にいくつかのコードを投稿 –

答えて

-3

SEキーボードを表示/非表示するには、次のような機能:

/** 
* Hides the soft keyboard 
*/ 
public void hideSoftKeyboard() { 
    if(getCurrentFocus()!=null) { 
     InputMethodManager inputMethodManager = (InputMethodManager) getSystemService(INPUT_METHOD_SERVICE); 
     inputMethodManager.hideSoftInputFromWindow(getCurrentFocus().getWindowToken(), 0); 
    } 
} 

/** 
* Shows the soft keyboard 
*/ 
public void showSoftKeyboard(View view) { 
    InputMethodManager inputMethodManager = (InputMethodManager) getSystemService(INPUT_METHOD_SERVICE); 
    view.requestFocus(); 
    inputMethodManager.showSoftInput(view, 0); 
} 
+0

をチェックしてください。私はこの機能を実装しました。私は他のビューの隠蔽と調整する必要があります。 – colymore

+0

あなたはちょうどビューオブジェクトを渡すことができます –

+0

何? (10moretogo) – colymore

0

私はGitHubのプロジェクトをチェックし、バグを発見し、私は次のコードでそのバグを修正したしている:

if (isRedPanelVisible()) { 
    showRedPanel(false); 
    showKeyboard(true, new KeyboardCallback() { 
     @Override 
     public void onKeyboardDone(boolean isVisible) { 

     } 
    }); 
} 
if (KeyboardVisibilityEvent.isKeyboardVisible(TestActivity.this)) { 
    hideKeyboard(TestActivity.this); 
    new android.os.Handler().postDelayed(new Runnable() { 
     @Override 
     public void run() { 
      showRedPanel(true); 
     } 
    }, 100); 

注:これは、ボタンのクリックイベントの下でTestActivity.javaにこれを入れ、前のコードを削除するだけです。あなたのreadPanelが表示されている場合、私は

をやった

は私はfalseshowRedPanelと呼ばれ、キーボードを開こう。 hideKeyboard:私はキーボードの可視性イベントのチェックを追加したキーボードが表示されている場合、私はキーボードが離れて行くとコード100ミリ

の遅延後trueshowReadPanelを呼び出す作るためにhideKeyboardを呼び出した後

public void hideKeyboard(Activity activity) { 
     // Check if no view has focus: 
     try { 
      View view = activity.getCurrentFocus(); 
      if (view != null) { 
       InputMethodManager inputManager = (InputMethodManager) activity.getSystemService(Context.INPUT_METHOD_SERVICE); 
       inputManager.hideSoftInputFromWindow(view.getWindowToken(), InputMethodManager.HIDE_NOT_ALWAYS); 
      } 
     } catch (Exception e) { 

     } 
    } 
+0

こんにちは、あなたの答えに感謝します。しかし、この解決策は、キーボードと赤のパネルが同時に表示されるという問題を解決するだけです。もう1つの問題(どちらも表示されていない場合)はまだ存在し、さらに目に見えます。私は、重要な質問は、どのように単一のレイアウト/レンダリングパスで赤いパネルとキーボードの可視性を切り替えて、シームレスにスワップするかということです。 – sidon

+0

その場合、[KeyboardView](https://developer.android.com/reference/android/inputmethodservice/KeyboardView.html)とredPanelレイアウトを1つのレイアウトコンテナにレンダリングする必要があります。 –

関連する問題