2014-11-10 2 views
3

У меня есть некоторые проблемы с использованием нового CardViewпроблемы совместимости CardView на Pre-леденец

Это моя текущая ситуация: Я хочу использовать CardView обеспечить Floating кнопку Действие для всех устройств (также 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

теперь я хочу, чтобы установить cardElevation, установив это в XML

cardview:cardElevation="8dp" 

После запуска приложения кнопка выглядит следующим образом (это не круг больше): MainActivity with FAB - custom cardView corner radius - set to 8dp

Кажется, что установка высоты карты также влияет на размеры вида ... Если вы посмотрите ближе к изображению № 1, вы увидите, что эта кнопка не является также идеальным кругом.

Есть ли способ понять это? Я также попытался установить этот

cardview:cardPreventCornerOverlap="false" 

Но это также не влияет

Спасибо, ребята :)

+0

Почему вы используете CardView для FAB? –

+0

Я использую CardView, потому что хочу предоставить тень на более старые устройства ... – kyp

+0

Не используйте CardView для FAB. Это действительно не предназначено для этого. – alanv

ответ

0

Вы можете попробовать использовать FAB из этой библиотеки MaterialDesign, если вы отчаянно для эффекта тени на старых устройствах.

Вы можете найти библиотеку в 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" /> 

В качестве альтернативы вы можете создать свой собственный теневой ресурс в папку вводимого коэффициента, а также добавить форму ниже вашей кнопки, что-то вроде этого:

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

Использование CardView для теней FAB - не самая лучшая идея. CardView - это макет, поэтому он довольно тяжелый. Он также очень ограничен для версий до Lollipop. Тень не анимирована, углы заполняются содержимым, и пульсации нет. Похоже, что нет хорошего метода для достижения 100% FAB, используя только AppCompat.

В общем, я не рад ограничению AppCompat, поэтому я написал свои собственные классы Button на основе обычных. Я смог добиться очень хороших результатов, как вы можете видеть на скриншоте. Это пряники, а также анимированные тени, рябь, векторная графика и т. Д. Это довольно большой репозиторий, поэтому я не могу дать вам короткое решение здесь, но, если хотите, проверьте код на github.

enter image description here

Смежные вопросы