【问题标题】:How to use "layerType" value being set differently inside the resources?如何在资源中使用不同设置的“layerType”值?
【发布时间】:2014-12-07 04:13:25
【问题描述】:

假设有一个视图在使用 GPU 加速时会出现问题,但仅限于特定的 Android 版本。

我希望在这个有问题的版本(包括)之前使用 android:layerType="software",在这个版本之后使用 android:layerType="hardware",都在资源中。

我知道如何处理字符串和简单资源(使用简单限定符和多个文件),但是我该如何处理这种资源呢?我应该去哪里看?

我应该只使用“整数”作为资源吗?还是有更好、更正式的方式?

注意:我知道如何以编程方式进行。我想知道如何在资源范围内做到这一点。

【问题讨论】:

  • 清单与资源不同,依赖于应用程序,因此您不能制作特定于 API 的清单。只需坚持编程方式即可。
  • @user3249477 我没有谈论清单。我讲了一个视图属性:developer.android.com/reference/android/view/…
  • 哦,我的错。那么限定符和多个文件有什么问题呢?
  • @user3249477 我只是不确定使用常量整数(而不是它们的名称)是否被认为是最好的方法。正确的做法是什么?

标签: android gpu hardware-acceleration


【解决方案1】:

由于您无法从 xml 访问 View 类的静态常量,因此您应该使用 API 特定的布局。例如:

res/layout/layout.xml

<View
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:layerType="software"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"/>

res/layout-v11/layout.xml:

<View
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:layerType="hardware"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"/>

您也可以在更大的布局中&lt;include layout="@layout/layout"/&gt;,这样您就不必复制所有内容。

但是,一个更简洁的解决方案(尤其是如果您需要多次设置 layerType)是以编程方式设置它。

【讨论】:

  • 我为值本身编写了多个资源。不是布局。使用多个布局可能会导致糟糕的编程。视图的示例只是一个示例。想想如果我有多个视图会发生什么......
  • @androiddeveloper 我明白你的意思,有点意思。但是,由于 xml 无法访问类常量,因此您只能以编程方式设置层类型,因为 IMO 之类的整数资源也会被视为糟糕的编程实践
  • 这就是我问这个问题的原因。我要求最佳实践。我也认为有时在代码中设置它而不是在 XML 中设置它。我试过帮助这篇文章:stackoverflow.com/q/26206324。我发现在 Android 4.0-4.2 上出现了这个问题,您可以通过在 XMl 中使用 layerType="software" 并在代码中重置它来解决它,但我认为最好在 XML 中设置它以便它只会发生在这个有问题的 Android 版本范围内。
猜你喜欢
  • 2011-01-16
  • 1970-01-01
  • 2022-07-26
  • 1970-01-01
  • 2016-02-24
  • 1970-01-01
  • 2021-04-30
  • 1970-01-01
  • 2012-03-24
相关资源
最近更新 更多