Android 布局 - 何时使用 app: vs android:?
Android Layout - when to use app: vs android:?
我一直在编写一些 Android 应用程序,但我不太明白何时使用 app:
以及何时使用 android:
。当样式没有按照预期的方式应用时,我会反复试验,有时发现使用 app:
而不是 android:
可以解决问题,但我不明白为什么。如果有人能指出我正确的方向,那就太好了。谢谢!
如果您查看布局 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
文件中指定,或由其他人在使用的库之一中指定。
您在谈论自定义 namespace.In android 我们可以在现有视图之外创建自定义视图。
根据 Google 开发者文档..
要将内置视图添加到您的用户界面,您可以在 XML 元素中指定它并使用元素属性控制它的外观和行为。还可以通过 XML 添加编写良好的自定义视图并设置样式。要在您的自定义视图中启用此行为,您必须:
在资源元素中为您的视图定义自定义属性
在 XML 布局中指定属性值
在运行时检索属性值
将检索到的属性值应用于您的视图
定义自定义属性后,您可以像使用内置属性一样在布局 XML 文件中使用它们。唯一的区别是您的自定义属性属于不同的命名空间。而不是属于http://schemas.android.com/apk/res/android namespace, they belong to http://schemas.android.com/apk/res/[your包名]
因此,如果您使用默认视图,您可以使用 android 命名空间,如果您想设置和使用自定义视图的属性,您可以定义您自己的名称。
参考this
此外,您会发现两个变体
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"
您可以使用应用命名空间使应用与旧 API 版本兼容。
例如
app:srcCompat="@drawable/customborder" 具有相同的效果
android:background="@drawable/customborder"
不同之处在于,第一个可以与较早的 API 一起正常工作,而第二个不会显示您想要的内容。
有时 属性 和 android 仅在新的 Android 版本中可用,例如
在这种情况下,您应该使用 app:...
以使其与旧版本一起使用。
我一直在编写一些 Android 应用程序,但我不太明白何时使用 app:
以及何时使用 android:
。当样式没有按照预期的方式应用时,我会反复试验,有时发现使用 app:
而不是 android:
可以解决问题,但我不明白为什么。如果有人能指出我正确的方向,那就太好了。谢谢!
如果您查看布局 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
文件中指定,或由其他人在使用的库之一中指定。
您在谈论自定义 namespace.In android 我们可以在现有视图之外创建自定义视图。 根据 Google 开发者文档.. 要将内置视图添加到您的用户界面,您可以在 XML 元素中指定它并使用元素属性控制它的外观和行为。还可以通过 XML 添加编写良好的自定义视图并设置样式。要在您的自定义视图中启用此行为,您必须:
在资源元素中为您的视图定义自定义属性 在 XML 布局中指定属性值 在运行时检索属性值 将检索到的属性值应用于您的视图
定义自定义属性后,您可以像使用内置属性一样在布局 XML 文件中使用它们。唯一的区别是您的自定义属性属于不同的命名空间。而不是属于http://schemas.android.com/apk/res/android namespace, they belong to http://schemas.android.com/apk/res/[your包名]
因此,如果您使用默认视图,您可以使用 android 命名空间,如果您想设置和使用自定义视图的属性,您可以定义您自己的名称。
参考this
此外,您会发现两个变体
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"
您可以使用应用命名空间使应用与旧 API 版本兼容。
例如 app:srcCompat="@drawable/customborder" 具有相同的效果 android:background="@drawable/customborder" 不同之处在于,第一个可以与较早的 API 一起正常工作,而第二个不会显示您想要的内容。
有时 属性 和 android 仅在新的 Android 版本中可用,例如
在这种情况下,您应该使用 app:...
以使其与旧版本一起使用。