【问题标题】:Android Rounded Corners - XML vs Java versionAndroid 圆角 - XML 与 Java 版本
【发布时间】:2018-12-22 23:22:35
【问题描述】:

我们在某些布局中需要圆角,我们想出了两种方法。尽管这两种方法都运行良好,但结果略有不同,我想在这里获得一些关于不同行为的见解。

第一种方法是使用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);
}

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

所以我想了解使用 Java 方法的任何缺点,以及 xml 中的 9dp 如何转换为不同设备的 java 中的 setCornerRadius 参数。有什么见解吗?

谢谢

【问题讨论】:

    标签: android xml rounded-corners


    【解决方案1】:

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

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

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

    虽然使用XML 提供了出色的性能,但在场景框架背后进行此转换以在每台设备上显示相同的结果。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-11-24
      • 1970-01-01
      • 1970-01-01
      • 2012-05-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多