2017-02-11 3 views
0

J'utilise le FAB de la nouvelle bibliothèque de support de conception par Google. J'ai un écran avec une forme longue et un FAB. Je veux que le FAB disparaisse quand le clavier souple s'ouvre. Impossible de trouver un moyen de détecter le clavier logiciel ouvert. Y at-il une autre optionFAB a répondu lorsque le texte d'édition a cliqué, FAB arrive avec le clavier

Je ne peux pas définir un écouteur à EditText comme tous sont contenus dans un Fragment s différent et l'écouteur de changement de mise au point n'est pas disponible dans un autre Fragment s.

J'ai mis en œuvre FAB dans Activity principal, donc je ne pouvais pas faire cacher l'écouteur de la carte clavier pour EditText focus écouteur quelqu'un peut-il s'il vous plaît avoir une solution partager avec moi.

Répondre

2

Il n'y a aucun moyen direct de savoir quand le clavier logiciel ouvre, vous pouvez cependant effectuer les opérations suivantes:

contentView.getViewTreeObserver().addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() { 
@Override 
public void onGlobalLayout() { 

    Rect r = new Rect(); 
    contentView.getWindowVisibleDisplayFrame(r); 
    int screenHeight = contentView.getRootView().getHeight(); 

    // r.bottom is the position above soft keypad or device button. 
    // if keypad is shown, the r.bottom is smaller than that before. 
    int keypadHeight = screenHeight - r.bottom; 

    if (keypadHeight > screenHeight * 0.15) { 
     // keyboard is opened 
     // Hide your FAB here 
    } 
    else { 
     // keyboard is closed 
    } 
} 
}); 
+0

Merci Zed. J'ai résolu ce problème par le code de votre ....... –

+0

En utilisant view pager j'ai mis en place des fragments mutilple comment utiliser ce code pouvez-vous me dire plz. j'ai essayé mais fab a été ouvert et fermé soudainement alors fab était en activité principale il montre tous les fragments –

0

Vous pouvez écouter l'ouverture et la fermeture du clavier.

public class BaseActivity extends Activity { 
private ViewTreeObserver.OnGlobalLayoutListener keyboardLayoutListener = new ViewTreeObserver.OnGlobalLayoutListener() { 
    @Override 
    public void onGlobalLayout() { 
     int heightDiff = rootLayout.getRootView().getHeight() - rootLayout.getHeight(); 
     int contentViewTop = getWindow().findViewById(Window.ID_ANDROID_CONTENT).getTop(); 

     LocalBroadcastManager broadcastManager = LocalBroadcastManager.getInstance(BaseActivity.this); 

     if(heightDiff <= contentViewTop){ 
      onHideKeyboard(); 

      Intent intent = new Intent("KeyboardWillHide"); 
      broadcastManager.sendBroadcast(intent); 
     } else { 
      int keyboardHeight = heightDiff - contentViewTop; 
      onShowKeyboard(keyboardHeight); 

      Intent intent = new Intent("KeyboardWillShow"); 
      intent.putExtra("KeyboardHeight", keyboardHeight); 
      broadcastManager.sendBroadcast(intent); 
     } 
    } 
}; 

private boolean keyboardListenersAttached = false; 
private ViewGroup rootLayout; 

protected void onShowKeyboard(int keyboardHeight) {} 
protected void onHideKeyboard() {} 

protected void attachKeyboardListeners() { 
    if (keyboardListenersAttached) { 
     return; 
    } 

    rootLayout = (ViewGroup) findViewById(R.id.rootLayout); 
    rootLayout.getViewTreeObserver().addOnGlobalLayoutListener(keyboardLayoutListener); 

    keyboardListenersAttached = true; 
} 

@Override 
protected void onDestroy() { 
    super.onDestroy(); 

    if (keyboardListenersAttached) { 
     rootLayout.getViewTreeObserver().removeGlobalOnLayoutListener(keyboardLayoutListener); 
    } 
} 
} 

exemple plus détaillé figurant dans cette question: SoftKeyboard open and close listener in an activity in Android?