在某些布局中我们需要圆角,我们提出了两种方法。尽管这两种方法都可以正常工作,但结果却略有不同,我希望从这里了解一些不同的行为。
第一种方法是使用 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参数。有见识吗?
谢谢
答案 0 :(得分:2)
setCornerRadius
将float
值视为像素。您可以根据设备屏幕的密度和尺寸将9dp
的值转换为dp
来为此功能提供相同的值px
以下行为您提供了9dp
的等效像素值
TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, 9, context.getResources().getDisplayMetrics());
尽管使用XML
可以提供出色的性能,但在后台框架中进行此转换以在每个设备上显示相同的结果。