Android圆角-XML与Java版本

时间:2018-12-22 14:09:49

标签: android xml rounded-corners

在某些布局中我们需要圆角,我们提出了两种方法。尽管这两种方法都可以正常工作,但结果却略有不同,我希望从这里了解一些不同的行为。

第一种方法是使用 XML

<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android" >
    <solid android:color="#e1d6a6" />
    <corners android:radius="9dp" />
</shape>

这有效。但是,XML方法的问题是颜色和半径是固定的,我们需要创建重复的可绘制对象以仅更改任何参数。因此,我们提出了Java版本,该版本非常灵活,并且就像一个魅力一样工作,尽管结果略有不同。下面是Java版本

void setRoundedCorners(View view, int color, float radius) {
    GradientDrawable drawable = new GradientDrawable();
    drawable.setColor(color);
    drawable.setCornerRadius(radius);
    view.setBackground(drawable);
}

尽管两种方法都可以正常工作,但是两种方法都需要在radius参数中使用不同的值才能获得相同的效果。例如,如果我在XML版本中使用android:radius="9dp",则需要在Java中使用setCornerRadius(30.0f)来获得几乎相同的效果。

因此,我想了解使用Java方法的任何弊端,以及针对不同设备的xml中的9dp如何转换为java中的setCornerRadius参数。有见识吗?

谢谢

1 个答案:

答案 0 :(得分:2)

setCornerRadiusfloat值视为像素。您可以根据设备屏幕的密度和尺寸将9dp的值转换为dp来为此功能提供相同的值px

以下行为您提供了9dp的等效像素值

TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, 9, context.getResources().getDisplayMetrics());

尽管使用XML可以提供出色的性能,但在后台框架中进行此转换以在每个设备上显示相同的结果。