#android #material-design #android-cardview
#Android #материал-дизайн #android-cardview
Вопрос:
У меня есть макет представления, использующий a CardView
, который должен выглядеть следующим образом
И он отлично смотрится на устройствах под управлением Android 9 и выше (API 28 ). Однако на чем-либо более старом он выглядит сломанным:
Макет выглядит следующим образом:
<?xml version="1.0" encoding="utf-8"?>
<android.support.v7.widget.CardView xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="125dp"
android:layout_height="40dp"
android:layout_marginEnd="8dp"
app:cardCornerRadius="165dp"
app:cardElevation="8dp"
app:contentPadding="8dp"
>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:gravity="center_vertical"
android:orientation="horizontal"
>
<android.support.v7.widget.CardView
android:layout_width="24dp"
android:layout_height="24dp"
app:cardCornerRadius="16dp"
app:cardElevation="0dp"
>
<ImageView
android:id="@ id/tab_icon"
android:layout_width="26dp"
android:layout_height="26dp"
android:layout_gravity="center"
tools:src="@tools:sample/avatars"
/>
</android.support.v7.widget.CardView>
<TextView
android:id="@ id/tab_title"
android:layout_width="60dp"
android:layout_height="match_parent"
android:layout_marginStart="4dp"
android:layout_marginEnd="6dp"
android:ellipsize="end"
android:gravity="center_vertical"
android:maxLines="1"
android:paddingBottom="2dp"
android:textColor="@android:color/black"
android:textSize="14sp"
tools:text="Sample User"
/>
<ImageView
android:id="@ id/tab_close"
android:layout_width="14dp"
android:layout_height="14dp"
android:src="@drawable/btn_close"
/>
</LinearLayout>
</android.support.v7.widget.CardView>
Я использую 'com.android.support:cardview-v7:28.0.0'
зависимость.
Ответ №1:
Похоже, проблема заключалась в значении, установленном для cardCornerRadius
. Установив его на 20dp, я получил желаемый радиус границы без нарушения макета.
Ответ №2:
Вы можете использовать SDP
— масштабируемую единицу измерения
dependencies {
implementation 'com.intuit.sdp:sdp-android:1.0.6'
}
К ВАШЕМУ СВЕДЕНИЮ
<android.support.v7.widget.CardView
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="125dp"
android:layout_height="40dp"
android:layout_marginEnd="8dp"
app:cardCornerRadius="165dp"
app:cardElevation="8dp"
app:contentPadding="8dp"
>
Приводит к несоответствию. Разные макеты приводят к жесткому кодированию разных размеров шрифта и полей, что делает приложение менее отточенным.
ПОПРОБУЙТЕ
<?xml version="1.0" encoding="utf-8"?>
<android.support.v7.widget.CardView
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="@dimen/_125sdp"
android:layout_height="@dimen/_35sdp"
android:layout_marginEnd="@dimen/_5sdp"
app:cardCornerRadius="@dimen/_150sdp"
app:cardElevation="@dimen/_5sdp"
app:contentPadding="@dimen/_5sdp"
>
.........
<android.support.v7.widget.CardView
android:layout_width="@dimen/_22sdp"
android:layout_height="@dimen/_22sdp"
app:cardCornerRadius="@dimen/_12sdp"
app:cardElevation="0dp"
>
ПРИМЕЧАНИЕ
Переключитесь на AndroidX
.
AndroidX заменяет исходные API-интерфейсы библиотеки поддержки пакетами в пространстве имен androidx. Изменились только имена артефактов package и Maven; имена классов, методов и полей не изменились.
Нравится
<androidx.cardview.widget.CardView