J'utilise Snack bar et FAB dans mon application Même page, Chaque fois que Snackbar affiche le bouton d'action flottante qui ne monte pas.
J'utilise une bibliothèque tierce pour attachToListView fonctionne bien
import com.melnykov.fab.FloatingActionButton;
si j'utilise la bibliothèque par défaut "ne peut pas être résolu attachToListView"
import Android.support.design.widget.FloatingActionButton;
Mon besoin:
attachToListView devrait fonctionner (For lorsque Listview Scroling Down FAB disparaîtra).
Chaque fois que Snackbar affiche le bouton d'action flottante doit monter.
Aidez-moi à résoudre ce problème.
Lien vers une bibliothèque tierce
EDIT: 1
J'ai supprimé la bibliothèque tierce ajoutée lors de l'importation par défaut (import Android.support.design.widget.FloatingActionButton), FAB est en train de monter mais Attachtolistivew n'est pas résolu.
EDIT: 2
J'ai utilisé Listview Dans mon activité, avec FAB et Snackbar . Il me faut donc les deux options, comme FAB monter lorsque Snackbar s'ouvre et que Listview fait défiler vers le bas Devrait masquer FAB.
Mon code Snackbar:
Snackbar snack = Snackbar.make(fab1, " Successfully ...!",Snackbar.LENGTH_SHORT);
View snackbarView = snack.getView();
snackbarView.setBackgroundColor(Color.parseColor("#f44336"));
snack.show();
Main.Java
import com.melnykov.fab.FloatingActionButton;
@Override
protected void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.fabview);
fab1 = (FloatingActionButton) findViewById(R.id.fab);
fab1.setShadow(true);
//fab.attachToListView(provider_service_list);
//FloatingActionButton fab = (FloatingActionButton) findViewById(R.id.fab);
fab1.attachToListView(listViewData, new ScrollDirectionListener()
{
@Override
public void onScrollDown() {
Log.d("ListViewFragment", "onScrollDown()");
}
@Override
public void onScrollUp() {
Log.d("ListViewFragment", "onScrollUp()");
}
}, new AbsListView.OnScrollListener() {
@Override
public void onScrollStateChanged(AbsListView view, int scrollState) {
Log.d("ListViewFragment", "onScrollStateChanged()");
}
@Override
public void onScroll(AbsListView view, int firstVisibleItem, int visibleItemCount, int totalItemCount) {
Log.d("ListViewFragment", "onScroll()");
}
});
}
fabview.xml
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout
xmlns:Android="http://schemas.Android.com/apk/res/Android"
xmlns:app78="http://schemas.Android.com/apk/res-auto"
xmlns:tools="http://schemas.Android.com/tools"
Android:layout_width="match_parent"
Android:layout_height="match_parent"
>
>
<Android.support.design.widget.CoordinatorLayout
Android:layout_width="match_parent"
Android:layout_height="match_parent"
Android:id="@+id/coordinatorlayout">
<com.melnykov.fab.FloatingActionButton
Android:id="@+id/fab"
Android:layout_width="wrap_content"
Android:layout_height="wrap_content"
Android:layout_gravity="bottom|right"
Android:layout_margin="@dimen/fab_margin"
Android:src="@drawable/ic_add_white_24dp"
app78:fab_colorNormal="@color/accent"
app78:fab_colorPressed="@color/accent_pressed"
app78:fab_colorRipple="@color/ripple"
app78:fabSize="normal"
app78:borderWidth="0dp"
Android:layout_marginBottom="@dimen/fab_margin_bottom"
Android:layout_marginRight="@dimen/fab_margin_right"
/>
</Android.support.design.widget.CoordinatorLayout>
</RelativeLayout>
Nous avons 2 façons de faire cela:
Lorsque la barre d’affichage montre un bouton d’action flottante, elle doit monter.
Vous utilisez la 3ème lib: import com.melnykov.fab.FloatingActionButton;
so vous devez implémenter un comportement personnalisé:
fichier xml:
<com.melnykov.fab.FloatingActionButton xmlns:fab="http://schemas.Android.com/apk/res-auto"
Android:id="@+id/fab"
Android:layout_width="wrap_content"
Android:layout_height="wrap_content"
Android:layout_gravity="bottom|end"
Android:layout_margin="16dp"
Android:src="@drawable/sort_variant"
fab:fab_colorNormal="@color/colorPrimary"
fab:fab_colorPressed="@color/colorPrimaryDark"
fab:fab_colorRipple="@color/colorAccent"
app:layout_behavior="com.simpleapp.tvtan.testcustomfloatingactionbutton.SnackBarBehavior"/>
Classe de comportement personnalisé:
public class SnackBarBehavior extends CoordinatorLayout.Behavior<FloatingActionButton> {
public SnackBarBehavior() {
}
public SnackBarBehavior(Context context, AttributeSet attrs) {
super(context, attrs);
}
@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;
}
}
attachToListView devrait fonctionner (pour quand Listview Scroling Down FAB disparaîtra )
Ou, si vous souhaitez utiliser un bouton d'action flottant à partir de Design Library, vous pouvez implémenter avec RecyclerView de la manière suivante: vous devez également implémenter un comportement personnalisé:
<Android.support.v7.widget.RecyclerView
Android:id="@+id/recycler_view"
Android:layout_width="match_parent"
Android:layout_height="match_parent"/>
<Android.support.design.widget.FloatingActionButton
Android:id="@+id/fab"
Android:layout_width="wrap_content"
Android:layout_height="wrap_content"
Android:src="@drawable/sort_variant"
Android:layout_gravity="bottom|end"
Android:layout_margin="16dp"
app:layout_behavior="com.simpleapp.tvtan.testcustomfloatingactionbutton.ScrollBehavior"/>
Votre classe de comportement:
public class ScrollBehavior extends FloatingActionButton.Behavior {
public ScrollBehavior(Context context, AttributeSet attrs) {
super();
}
@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) {
CoordinatorLayout.LayoutParams layoutParams = (CoordinatorLayout.LayoutParams) child.getLayoutParams();
int fab_bottomMargin = layoutParams.bottomMargin;
child.animate().translationY(child.getHeight() + fab_bottomMargin).setInterpolator(new LinearInterpolator()).start();
} else if (dyConsumed < 0) {
child.animate().translationY(0).setInterpolator(new LinearInterpolator()).start();
}
}
@Override
public boolean onStartNestedScroll(CoordinatorLayout coordinatorLayout, FloatingActionButton child, View directTargetChild, View target, int nestedScrollAxes) {
return nestedScrollAxes == ViewCompat.SCROLL_AXIS_VERTICAL;
}
}
Votre mise en page parent doit être un CoordinatorLayout P/s: je ne sais pas pourquoi mon code xml n'affiche pas tout le texte de mon fichier, je ne peux donc pas afficher le fichier xml complet pour vous.
pour utiliser le bouton d'action flottant, vous devez utiliser cette structure pour votre xml-
<?xml version="1.0" encoding="utf-8"?>
<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:layout_width="match_parent"
Android:layout_height="match_parent"
Android:fitsSystemWindows="true"
tools:context="com.afixi.prasenjeetpati.trailone.MainActivity">
<include layout="@layout/content_main" />
<Android.support.design.widget.FloatingActionButton
Android:id="@+id/fab"
Android:layout_width="wrap_content"
Android:layout_height="wrap_content"
Android:layout_gravity="bottom|end"
Android:layout_margin="@dimen/fab_margin"
Android:src="@Android:drawable/ic_dialog_email" />
</Android.support.design.widget.CoordinatorLayout>
le content_main devrait être votre contenu principal où vous définissez tous vos textes et boutons et tout autre contenu. la mise en page du coordinateur doit contenir autant de code. le code supplémentaire qu'il peut contenir est barre d'outils ou tiroir de navigation. le contenu principal doit toujours être un autre fichier XML.
Activité principale
FloatingActionButton fab = (FloatingActionButton) findViewById(R.id.fab);
fab.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Snackbar.make(view, "Replace with your own action", Snackbar.LENGTH_LONG)
.setAction("Action", null).show();
}
});
Vous devez utiliser <Android.support.design.widget.CoordinatorLayout
comme balise racine dans votre fichier de présentation. Ce n’est qu’alors que vous pourrez obtenir le résultat souhaité.
ÉTAPE 1
<?xml version="1.0" encoding="utf-8"?>
<Android.support.design.widget.CoordinatorLayout
xmlns:Android="http://schemas.Android.com/apk/res/Android"
xmlns:app78="http://schemas.Android.com/apk/res-auto"
xmlns:tools="http://schemas.Android.com/tools"
Android:id="@+id/myCoordinatorLayout"
Android:layout_width="match_parent"
Android:layout_height="match_parent">
<com.melnykov.fab.FloatingActionButton
Android:id="@+id/fab"
Android:layout_width="wrap_content"
Android:layout_height="wrap_content"
Android:layout_gravity="bottom|right"
Android:layout_margin="@dimen/fab_margin"
Android:src="@drawable/ic_add_white_24dp"
app78:fab_colorNormal="@color/accent"
app78:fab_colorPressed="@color/accent_pressed"
app78:fab_colorRipple="@color/ripple"
app78:fabSize="normal"
app78:borderWidth="0dp"
Android:layout_marginBottom="@dimen/fab_margin_bottom"
Android:layout_marginRight="@dimen/fab_margin_right"
/>
</Android.support.design.widget.CoordinatorLayout>
ÉTAPE 2:
CoordinatorLayout myCoordinatorLayout = (CoordinatorLayout)findViewById(R.id.mycoordinatorLayout);
Snackbar snack = Snackbar.make(myCoordinatorLayout,"Successfully.!",Snackbar.LENGTH_SHORT);
Pour plus d'informations, consultez Dev blog Android .