2015-11-16 14 views
11

ich verschiedene Beiträge über FABs gesehen haben sowie Scroll-empfindlichen FABs am unteren Rand des Bildschirms, um Pop-ups Snackbar reagieren. Aber gibt es einige Implementierung von FloatingActionButton.Behavior (oder ähnlich) die FAB über die Tastatur zu bewegen, wenn er erscheint?Make FAB reagieren auf Soft-Tastatur anzeigen/ausblenden ändert

Gerade jetzt deckt die Tastatur, um die FAB, wenn ich in einem EditText Feld zum Beispiel klicken. Mein Ziel ist es, den FAB so zu animieren, dass er unabhängig vom Tastaturstatus immer sichtbar ist.

EDIT: Sowohl android:windowSoftInputMode="adjustResize" als auch ...="adjustPan" werden nichts ändern. Nun, adjustResize ändert die Größe des zugrundeliegenden Layouts (was in meinem Fall eine Karte ist), aber der FAB bewegt sich nicht.

+0

prüfen http://stackoverflow.com/questions/32216564/move-floating-action-button-above-keyboard – emerssso

+0

bereits über sie kam. OP verwendete eine benutzerdefinierte Implementierung des FAB ohne "CoordinatorLayout". Auch das Ändern von 'windowSoftInputMode' (wie in den Antworten vorgeschlagen) hilft nicht, wie in meinem EDIT geschrieben. – mohoff

+0

Hast du es herausgefunden? – David

Antwort

2

Ich hatte das gleiche Problem, ich habe versucht, eine ScrollView innerhalb meiner Root-Ansicht hinzuzufügen, aber es hat nicht funktioniert, weil der Inhalt nicht die Höhe der Anzeige überschreitet (die Fab reagiert wie erwartet in diesem Fall).

Also habe ich versucht, android:windowSoftInputMode="adjustResize" und es funktioniert für mich.

Für Informationen hier ist was xml mein Layout wie folgt aussieht:

<?xml version="1.0" encoding="utf-8"?> 
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:app="http://schemas.android.com/apk/res-auto" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent"> 

    <ManyViewsExceptScrollViews/> 

    <android.support.design.widget.FloatingActionButton 
     [..] 
     android:layout_alignParentBottom="true" 
     android:layout_alignParentRight="true" 
     android:layout_alignParentEnd="true"/> 

</RelativeLayout> 

es ein Fragment in einer Aktivität (in einem FrameLayout, die die Stammansicht match_parent) aufgeblasen ist, für die i android:windowSoftInputMode="adjustResize" im Manifest hinzugefügt.

3

Hallo zusammen ich weiß, es ist alt, aber für zukünftige oder aktuelle Leser/Sucher und auch der Thread-Hersteller, hat er keine Antwort noch nicht gefunden. So habe ich dieses Verhalten in meiner App.

Fab auf RecyclerView Scroll versteckt, geht nach oben, wenn Snack-Bar herausspringt, wenn fab nicht dargestellt ist und snackbar Popus und wenn man dann noch bewegen wird Fab gezeigt oben auf Snack-Bar und wird nach unten zu bewegen, wenn SB verschwindet und letzte mit Tastatur, wenn es öffnet Fab wird nach oben geschoben. (Sorry, musste ich schreiben Coz Ich weiß nicht, wie gif mit Eclipse-Emulator geben)

Bild

enter image description here

Layout-

<android.support.v4.widget.DrawerLayout xmlns:android="http://schemas.android.com/apk/res/android" 
xmlns:app="http://schemas.android.com/apk/res-auto" 
xmlns:tools="http://schemas.android.com/tools" 
android:id="@+id/layout_drawer" 
android:layout_width="match_parent" 
android:layout_height="match_parent" 
android:background="@color/GrayGood" 
android:clipToPadding="false" 
android:fitsSystemWindows="true" > 

<android.support.design.widget.CoordinatorLayout 
    xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:app="http://schemas.android.com/apk/res-auto" 
    xmlns:tools="http://schemas.android.com/tools" 
    android:id="@+id/layout_coordinator" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" > 

    <android.support.design.widget.AppBarLayout 
     android:id="@+id/layout_appLayout" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:theme="@style/ThemeOverlay.AppCompat.Dark" > 

     <android.support.v7.widget.Toolbar 
      android:id="@+id/toolbar" 
      android:layout_width="match_parent" 
      android:layout_height="?attr/actionBarSize" 
      app:layout_scrollFlags="scroll|enterAlways|snap" 
      android:background="?attr/colorPrimary" /> 
    </android.support.design.widget.AppBarLayout> 

    <android.support.v7.widget.RecyclerView 
     android:id="@+id/recyclerViewMain" 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" 
     app:layout_behavior="@string/appbar_scrolling_view_behavior" 
     android:clipToPadding="false" /> 

    <android.support.design.widget.FloatingActionButton 
     android:id="@+id/fab" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_alignParentBottom="true" 
     android:layout_gravity="bottom|end" 
     android:layout_margin="@dimen/floating_action_button_margin" 
     app:layout_behavior="com.faisal.cvcd.anim.ScrollingFABAnimation" 
     android:src="@drawable/ic_fab" 
     android:tint="@color/White" 
     app:backgroundTint="@color/colorPrimary" 
     app:borderWidth="0dp" 
     app:elevation="6dp" 
     app:fabSize="normal" /> 
</android.support.design.widget.CoordinatorLayout> 
</android.support.v4.widget.DrawerLayout> 

Wie Sie können Siehe ich verwende FabAnimation-Klasse, um einige seiner Standardmethoden zu überschreiben.

ScrollingFABAnimation

import android.content.Context; 
import android.support.design.widget.CoordinatorLayout; 
import android.support.design.widget.FloatingActionButton; 
import android.support.design.widget.Snackbar; 
import android.support.v4.view.ViewCompat; 
import android.util.AttributeSet; 
import android.view.View; 

public class ScrollingFABAnimation extends 
     CoordinatorLayout.Behavior<FloatingActionButton> { 

public ScrollingFABAnimation(Context context, AttributeSet attrs) { 
    super(context, attrs); 
} 

//For SnackBar to push up the Floating Button when it pops up 
@Override 
public boolean layoutDependsOn(CoordinatorLayout parent, FloatingActionButton child, View dependency) { 
    return dependency instanceof Snackbar.SnackbarLayout; 
} 

@Override 
public boolean onDependentViewChanged(CoordinatorLayout parent, FloatingActionButton child, View dependency) { 
    float translationY = Math.min(0, dependency.getTranslationY() - dependency.getHeight()); 
    child.setTranslationY(translationY); 
    return true; 
} 

//For FAB to hide or show on scroll 
@Override 
public boolean onStartNestedScroll(CoordinatorLayout coordinatorLayout, FloatingActionButton child, View directTargetChild, View target, 
     int nestedScrollAxes) { 
    return nestedScrollAxes == ViewCompat.SCROLL_AXIS_VERTICAL || super.onStartNestedScroll(coordinatorLayout, child, 
        directTargetChild, target, nestedScrollAxes); 
} 

@Override 
public void onNestedScroll(CoordinatorLayout coordinatorLayout, FloatingActionButton child, View target, int dxConsumed, 
     int dyConsumed, int dxUnconsumed, int dyUnconsumed) { 
    super.onNestedScroll(coordinatorLayout, child, target, dxConsumed, dyConsumed, dxUnconsumed, dyUnconsumed); 

    if (dyConsumed > 0 && child.getVisibility() == View.VISIBLE) { 
     child.hide(); 
    } else if (dyConsumed < 0 && child.getVisibility() != View.VISIBLE) { 
     child.show(); 
    } 
} 
} 
+0

Ich habe nicht ein Android-dev env so einrichten, kann ich Ihre Lösung nicht testen, sorry. Aber danke für die Veröffentlichung! – mohoff

+0

Ok, kein Problem :) –

Verwandte Themen