2017-08-12 157 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爲例。