2017-08-12 147 views
2

我在我的活动中有一个fab和BottomNavigationView,我使用fab来隐藏并显示BottomNavigationView。我下面的代码工作正常使用Android 7.0(1080×1920),但在4.4(在768×1280)两个Fab和BottomNavigationView是不可见的,在logcat的它说如何避免FAB与BottomNavigationView重叠?

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

我也得到一个警告在FAB说

@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.

这是我的布局

<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> 

这是怎么了^ h底部/显示底部

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

      } 

     } 
    }); 

回答

0

最简单的方法是使用CoordinatorLayout。以this tutorial为例。