Nye*_*ynn 12 android android-layout android-styles
我一直在写一些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"
Run Code Online (Sandbox Code Playgroud)
在这种情况下,app:命名空间将用于自定义属性,由您在attrs.xml文件中指定或由其他人在使用的库之一中指定。
小智 5
您正在谈论自定义命名空间.在Android中,我们可以在已有的视图之外创建自定义视图.按照Google开发人员文档中的说明..要在用户界面中添加内置视图,请在XML元素中指定它,并使用元素属性控制其外观和行为.编写良好的自定义视图也可以通过XML添加和设置样式.要在自定义视图中启用此行为,您必须:
在资源元素中为视图定义自定义属性在XML布局中指定属性的值在运行时检索属性值将检索到的属性值应用于视图
定义自定义属性后,可以像布局属性一样在布局XML文件中使用它们.唯一的区别是您的自定义属性属于不同的命名空间.它们不属于http://schemas.android.com/apk/res/android命名空间,而属于http://schemas.android.com/apk/res/ [您的包名]
因此,如果您使用默认视图,则可以使用android命名空间,如果要设置和使用自定义视图的属性,则可以定义自己的名称.
请参阅此
小智 5
您可以使用应用程序名称空间使应用程序与旧版API兼容。
例如app:srcCompat =“ @ drawable / customborder”与android:background =“ @ drawable / customborder”具有相同的效果。不同之处在于,第一个将与较旧的API一起正常工作,而第二个将不会显示您想要的内容。