我在活动中使用了一个FloatingActionButton(FAB)和BottomNavigationView。我使用FAB来隐藏和显示BottomNavigationView。我的以下代码在Android 7.0上(分辨率为1080 x 1920)运行良好,但是在Android 4.4上(分辨率为768 x 1280)FAB和BottomNavigationView都不可见。在logcat中,它说:
这是我隐藏/显示底部的方法。
无法找到类“android.graphics.drawable.RippleDrawable”,从方法android.support.v7.widget.AppCompatImageHelper.hasOverlappingRendering引用
我还收到一个有关FAB的警告,其中说:
@id/fab可以与@id/navigation重叠,如果由于本地化文本扩展而导致@id/fab增长。
如果相对布局具有文本或按钮项对齐到左侧和右侧,由于本地化文本扩展,它们可以彼此重叠,除非它们具有相互约束,如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>
这是我隐藏/显示底部的方法。
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();
}
}
});