2017-02-11 1 views
0

Ich verwende den FAB aus der neuen Design-Support-Bibliothek von Google. Ich habe einen Bildschirm mit einer langen Form und einem FAB. Ich möchte, dass der FAB verschwindet, wenn sich die Tastatur öffnet. Es kann keine Möglichkeit zur Erkennung der offenen Tastatur gefunden werden. Gibt es eine andere OptionFAB reagierte, wenn Text bearbeiten klicken, FAB kommt mit Tastatur

Ich kann einen Listener nicht auf EditText als die alle sind in einem anderen Fragment s und der On Fokus Änderung Listener ist nicht verfügbar in einem anderen Fragment s.

Ich habe FAB in Haupt Activity implementiert, so konnte ich nicht Keyboard-Listener für EditText Fokus-Listener verstecken kann jemand bitte eine Lösung mit mir teilen.

Antwort

2

Es gibt keine direkte Möglichkeit zu wissen, wenn die Soft-Tastatur öffnet, jedoch können Sie wie folgt vorgehen:

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

Dank Zed. Ich löste dieses Problem durch ur-Code ...... –

+0

Mit View Pager implementierte ich mehrere Fragmente, wie Sie diesen Code verwenden können Sie mir sagen. Ich versuchte es, aber Fab wurde plötzlich geöffnet und geschlossen, dann war Fab in Mainactivity, es zeigt alle Fragmente –

0

Sie für das Öffnen und Schließen der Tastatur hören konnte.

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); 
    } 
} 
} 

Detailliertere Beispiel in dieser Frage aufgeführt: SoftKeyboard open and close listener in an activity in Android?