簡體   English   中英

CardView cardUseCompatPadding

[英]CardView cardUseCompatPadding

我正在為Lollipop和早期版本開發Android應用程序。

我正在使用CardView(這個cardView沒有任何孩子,它只是放在我的View后面)來創建陰影。

但是當它在前Lollipop設備上運行時會出現問題。

所以我將cardUseCompatPadding設置為true。 我想知道我是否可以獲得這個compat填充的值?

有沒有我能找到價值的參考?

添加到CardView的compat填充取決於您設置的角的高度和半徑。 您可以在支持庫中的RoundRectDrawableWithShadow類中找到實際計算。

您可以在運行時使用以下內容計算它:

    float elevation = cardView.getMaxCardElevation();
    float radius = cardView.getRadius();
    double cos45 = Math.cos(Math.toRadians(45));

    int horizontalPadding = (int) (elevation + (1 - cos45) * radius);
    int verticalPadding = (int) (elevation * 1.5 + (1 - cos45) * radius);

更新CardView的向后兼容的最大高程。

如果設備操作系統版本為Lollipop或更新且getUseCompatPadding()為false,則調用此方法無效。 使用此代碼

android:elevation="3dp"app:elevation="3dp"到你的cardview

CardView使用Lollipop上的提升屬性來顯示陰影,然后回退到舊平台上的自定義模擬陰影實現。

由於圓角切割的昂貴性質,在Lollipop之前的平台上,CardView不會剪切與圓角相交的孩子。 相反,它添加了填充以避免這種交集(請參閱setPreventCornerOverlap(boolean)來更改此行為)。

在Lollipop之前,CardView會在其內容中添加填充並為該區域繪制陰影。 此填充量等於兩側的maxCardElevation +(1 - cos45)* cornerRadius,頂部和底部的maxCardElevation * 1.5 +(1 - cos45)* cornerRadius。

由於填充用於偏移陰影的內容,因此無法在CardView上設置填充。 相反,您可以在代碼中使用XML中的內容填充屬性或代碼中的setContentPadding(int,int,int,int)來設置CardView邊緣和CardView子節點之間的填充。

請注意,如果您為CardView指定精確尺寸,由於陰影,其內容區域在Lollipop之前和Lollipop之后的平台之間會有所不同。 通過使用api版本特定的資源值,您可以避免這些更改。 或者,如果您希望CardView在Lollipop平台上添加內部填充,之后也可以調用setUseCompatPadding(boolean)並傳遞true。

要以向后兼容的方式更改CardView的高程,請使用setCardElevation(float)。 CardView將在Lollipop上使用提升API,在Lollipop之前,它將改變陰影大小。 為避免在陰影大小發生變化時移動視圖,請使用getMaxCardElevation()來限制陰影大小。 如果要動態更改高程,則應在初始化CardView時調用setMaxCardElevation(float)。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM