【问题标题】:Android Layout - when to use app: vs android:?Android 布局 - 何时使用 app: vs android:?
【发布时间】:2015-01-20 12:40:50
【问题描述】:

我一直在编写一些 Android 应用程序,但我不太明白何时使用 app: 以及何时使用 android:。当样式没有按应有的方式应用时,我会反复试验,有时会发现使用app: 而不是android: 可以解决问题,但我不明白为什么。如果有人能指出我正确的方向,那就太好了。谢谢!

【问题讨论】:

  • 当您使用自定义属性时...它也适用于支持库中的属性... app 也不精确,因为它只是命名空间快捷方式,其含义取决于定义(fx: if你把xmlns:and="http://schemas.android.com/apk/res/android" 你可以使用and: 而不是android:)

标签: android android-layout android-styles


【解决方案1】:

您可以使用应用命名空间使应用与旧 API 版本兼容。

例如 app:srcCompat="@drawable/customborder" 具有相同的效果 android:background="@drawable/customborder" 不同之处在于第一个可以与旧 API 一起正常工作,而第二个不会显示您想要的内容。

【讨论】:

    【解决方案2】:

    您在谈论自定义命名空间。在 android 中,我们可以在现有视图之外创建自定义视图。 根据谷歌开发者文档.. 要将内置视图添加到用户界面,请在 XML 元素中指定它并使用元素属性控制其外观和行为。编写良好的自定义视图也可以通过 XML 添加和设置样式。要在您的自定义视图中启用此行为,您必须:

    在资源元素中为您的视图定义自定义属性 为 XML 布局中的属性指定值 在运行时检索属性值 将检索到的属性值应用于您的视图

    定义自定义属性后,您可以在布局 XML 文件中使用它们,就像内置属性一样。唯一的区别是您的自定义属性属于不同的命名空间。它们不属于http://schemas.android.com/apk/res/android命名空间,而是属于http://schemas.android.com/apk/res/[your包名]

    因此,如果您使用默认视图,您可以使用 android 命名空间,如果您想为自定义视图设置和使用属性,您可以定义自己的名称。

    参考this

    【讨论】:

      【解决方案3】:

      如果您查看布局 xml 文件的开头(您在其中使用了app:),您会(可能)找到如下行:

      <?xml version="1.0" encoding="utf-8"?>
      <SOME_LAYOUT xmlns:android="http://schemas.android.com/apk/res/android"
          xmlns:app="http://schemas.android.com/apk/res-auto"
      

      在这种情况下,app: 命名空间将用于自定义属性,由您在 attrs.xml 文件中指定,或者由其他人在使用的库之一中指定。

      【讨论】:

        【解决方案4】:

        有时带有 android 的属性仅在新的 Android 版本中可用,例如

        在这种情况下,您应该使用app:... 使其适用于旧版本。

        【讨论】:

        • 这是迄今为止最好的答案!
        【解决方案5】:

        此外,您会发现两种变体

        xmlns:app="http://schemas.android.com/apk/res-auto" 
        
        xmlns:app="http://schemas.android.com/apk/[packagename]"
        

        xmlns 行之间的区别在于 res-auto 负责解析我们的包,因为有时我们会在包中添加 .debug 或 .test 并且我们已经提供了应用程序的 packageid 示例:

        xmlns:app="http://schemas.android.com/apk/com.test.io.debug"
        xmlns:app="http://schemas.android.com/apk/com.test.io.test"
        

        【讨论】:

          猜你喜欢
          • 2015-09-19
          • 2012-12-02
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2013-06-07
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多