Pre-Lollipop上的CardView兼容性问题

时间:2014-11-10 23:16:45

标签: android android-5.0-lollipop android-cardview

使用新的CardView时遇到一些问题

这是我目前的情况:我想使用CardView为所有设备提供浮动操作按钮(也是Pre-Lollipop)

我的活动布局如下所示

<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
         xmlns:cardview="http://schemas.android.com/apk/res-auto"
         android:id="@+id/container"
         android:layout_width="match_parent"
         android:layout_height="match_parent"
         android:background="#cdcdcd"
         android:focusable="false">

<include layout="@layout/toolbar"/>


<android.support.v7.widget.CardView
    android:layout_width="58dp"
    android:layout_height="58dp"
    cardview:cardPreventCornerOverlap="true"
    android:layout_gravity="bottom|right"
    android:layout_marginBottom="16dp"
    android:layout_marginRight="18dp"
    cardview:cardCornerRadius="29dp"
    cardview:cardBackgroundColor="?attr/colorPrimary">

    <ImageView
        android:layout_width="24dp"
        android:layout_height="24dp"
        android:layout_gravity="center"
        android:layout_margin="12dp"
        android:src="@android:drawable/ic_menu_edit"/>
</android.support.v7.widget.CardView>

在Nexus 5(4.4.4)上运行应用程序,屏幕如下所示: MainActivity with FAB - no custom cardView corner radius

现在我想通过在xml中设置它来设置cardElevation

cardview:cardElevation="8dp"

启动应用后按钮看起来像这样(它不再是一个圆圈): MainActivity with FAB - custom cardView corner radius - set to 8dp

似乎设置卡片高度也会影响视图的尺寸...如果您现在仔细观察图片#1,您可以看到,此按钮也不是一个完美的圆圈。 / p>

有没有办法解决这个问题?我也试着设置这个

cardview:cardPreventCornerOverlap="false"

但它也没有影响

谢谢你们:)

2 个答案:

答案 0 :(得分:1)

使用CardView进行FAB阴影不是最佳选择。 CardView是一种布局,所以它很重。它在Lollipop前版本上也非常有限。阴影没有动画,角落填充内容,没有波纹。似乎没有好方法只使用AppCompat来实现100%的FAB。

一般来说,我不满足于AppCompat,因此我根据常规类编写了自己的Button类。你可以在屏幕截图中看到,我能够取得相当不错的效果。它的姜饼和动画阴影,涟漪,矢量图形等等。它是一个非常大的存储库,所以我不能在这里给你一个简短的解决方案,但如果你愿意,请查看github上的代码。

enter image description here

答案 1 :(得分:0)

如果您不想在旧设备上使用阴影效果,可以尝试使用此MaterialDesign库中的FAB。

您可以在https://github.com/navasmdc/MaterialDesignLibrary

找到该库
<com.gc.materialdesign.views.ButtonFloat
            android:id="@+id/buttonFloat"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_alignParentRight="true"
            android:layout_alignParentBottom="true"
            android:layout_marginRight="24dp"
            android:background="#1E88E5"
            materialdesign:animate="true"
            materialdesign:iconDrawable="@drawable/ic_action_new" />

或者,您可以在drawables文件夹中创建自己的影子资源,并在按钮下方添加形状,如下所示:

<shape android:shape="oval"
 xmlns:android="http://schemas.android.com/apk/res/android">

 <solid android:color="@color/black_alpha"/>
 <corners android:radius="20dip"/>

创建一个图层列表资源,其中包含按钮和阴影

<layer-list
xmlns:android="http://schemas.android.com/apk/res/android">
<item android:drawable="@drawable/shadow"/>
<item
 android:drawable="@drawable/button"
 android:bottom="4px" />  
 </layer-list>