2017-08-12 1 views
2

J'ai une fab et BottomNavigationView dans mon activité, j'utilise fab pour cacher et montrer BottomNavigationView. Mon code suivant fonctionne très bien avec Android 7.0 (sur 1080 x 1920), mais sur 4.4 (sur 768 x 1280) à la fois la FAB et BottomNavigationView ne sont pas visibles, En logcat il ditComment éviter que FAB ne chevauche BottomNavigationView?

Could not find class 'android.graphics.drawable.RippleDrawable', referenced from method android.support.v7.widget.AppCompatImageHelper.hasOverlappingRendering

Je reçois aussi un avertissement sur FAB en disant

@id/fab can overlap @id/navigation if @id/fab grows due to localize text expansion. If relative layout has text or button items aligned to left and right sides they can overlap each other due to localized text expansion unless they have mutual constraints like toEndOf/toStartOf.

Ceci est ma mise en page

<RelativeLayout android:layout_height="match_parent" 
android:layout_width="match_parent" 
xmlns:app="http://schemas.android.com/apk/res-auto" 
android:orientation="vertical" 
xmlns:android="http://schemas.android.com/apk/res/android"> 

<android.support.design.widget.FloatingActionButton 
    android:id="@+id/fab" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:layout_alignParentEnd="true" 
    android:layout_alignParentBottom="true" 
    android:layout_gravity="bottom|end" 
    android:clickable="true" 
    app:fabSize="mini" 
    app:rippleColor="@color/colorPrimary" 
    android:layout_margin="16dp" 
    app:srcCompat="@drawable/ic_show" /> 

    <FrameLayout android:layout_width="match_parent" 
     android:layout_height="match_parent" 
     android:id="@+id/container" 
     xmlns:android="http://schemas.android.com/apk/res/android"> 

     <!-- FrameLayout contents --> 

    </FrameLayout> 

    <FrameLayout 
     android:id="@+id/frame_layout" 
     android:layout_width="match_parent" 
     android:layout_height="3dp" 
     android:background="@android:color/transparent" 
     android:elevation="3dp"> 

     <!-- FrameLayout contents --> 

    </FrameLayout> 


     <android.support.design.widget.BottomNavigationView 
      android:id="@+id/navigation" 
      android:layout_width="match_parent" 
      android:layout_height="56dp" 
      android:layout_alignParentBottom="true" 
      android:background="@color/colorPrimary" 
      android:iconifiedByDefault="false" 
      app:itemIconTint="#fff" 
      app:itemTextColor="#fff" 
      app:menu="@menu/bottom_bar"/> 

</RelativeLayout> 

Voici comment je suis h Iding/montrant le fond

fab.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 

      if(bottomNavigationView.getVisibility() == View.VISIBLE){ 

       bottomNavigationView.setVisibility(GONE); 

       fab.setImageDrawable(ContextCompat.getDrawable(getApplicationContext(), R.drawable.ic_show)); 

       final ObjectAnimator moveFab 
         = ObjectAnimator.ofFloat(fab, View.TRANSLATION_Y, fab.getY(), 0); 
       moveFab.setDuration(300); 
       moveFab.setInterpolator(new DecelerateInterpolator()); 
       moveFab.start(); 

      }else if(bottomNavigationView.getVisibility() == View.GONE){ 

       bottomNavigationView.setVisibility(View.VISIBLE); 

       fab.setImageDrawable(ContextCompat.getDrawable(getApplicationContext(), R.drawable.ic_hide)); 

       final ObjectAnimator moveFab 
         = ObjectAnimator.ofFloat(fab, View.TRANSLATION_Y, fab.getY(), -150); 
       moveFab.setDuration(300); 
       moveFab.setInterpolator(new DecelerateInterpolator()); 
       moveFab.start(); 

      } 

     } 
    }); 

Répondre

0

La façon la plus simple est d'utiliser CoordinatorLayout. Voir this tutorial comme exemple.