Anko 提升了 Android 頁(yè)面的渲染速度洋侨,但是在用 Anko 寫(xiě)布局的時(shí)卻遇到了很多坑矾瑰,用 XML 可以輕松實(shí)現(xiàn)的一些效果跷坝,在 Anko 中經(jīng)常找不到解決方案酵镜。比如說(shuō)題目中的這個(gè)問(wèn)題。
XML 中 CardView 的實(shí)現(xiàn)
1. 首先在導(dǎo)入依賴(lài)
implementation 'com.android.support:cardview-v7:26.1.0'
2. XML 代碼
<android.support.v7.widget.CardView
app:cardCornerRadius="@dimen/dp_10"
app:cardElevation="@dimen/dp_10"
app:cardPreventCornerOverlap="true"
app:cardBackgroundColor="@color/colorBackground"
android:foreground="?android:attr/selectableItemBackgroundBorderless"
android:clickable="true"
android:focusable="true"
android:layout_gravity="center"
android:layout_width="match_parent"
android:layout_marginStart="20dp"
android:layout_marginEnd="20dp"
android:layout_height="80dp">
</android.support.v7.widget.CardView>
3. 屬性詳解
cardCornerRadius 屬性用來(lái)設(shè)置 CardView 的圓角效果
cardElevation 屬性用來(lái)提供 CardView 的陰影效果
cardBackgroundColor 屬性用來(lái)設(shè)置 CardView 中的背景顏色
foreground 屬性用來(lái)設(shè)置 CardView 的點(diǎn)擊效果柴钻,前提是添加 clickable 和 focusable
效果
Anko 中 CardView 的實(shí)現(xiàn)
1. 導(dǎo)入依賴(lài)
implementation "org.jetbrains.anko:anko-cardview-v7:$anko_version" // build.gradle Module: app
ext.anko_version='0.10.7' // build.gradle Project
2. Anko 代碼
cardView {
id_cardView = View.generateViewId()
id = id_cardView
radius = 43f
cardElevation = 30f
backgroundColor = ContextCompat.getColor(ctx, R.color.colorWhite)
//background.setColorFilter(Color.WHITE,PorterDuff.Mode.SRC_ATOP)
}.lparams(width = matchParent, height = dip(200)) {
leftMargin = dip(30)
topMargin = dip(30)
rightMargin = dip(30)
topToBottom = id_toolbar
startToStart = PARENT_ID
endToEnd = PARENT_ID
}
代碼看起來(lái)很完美淮韭,我們來(lái)看一下運(yùn)行效果:
效果
圓角呢?圓角呢贴届?圓角呢靠粪?
問(wèn)題就出在了這句代碼上:
backgroundColor = ContextCompat.getColor(ctx, R.color.colorWhite)
這句代碼將背景色設(shè)置給了 ColorDrawable 而不是 RoundRectDrawable足丢,所以應(yīng)該把這句代碼改成這樣:
background.setColorFilter(ContextCompat.getColor(ctx,R.color.colorWhite),PorterDuff.Mode.SRC_ATOP)
修改之后的運(yùn)行效果:
效果