我读过的关于Android XML布局文件中使用的自定义布局属性的大多数来源都说你应该声明一个自定义命名空间,通常是“app”,如下所示:
xmlns:app="http://schemas.android.com/apk/res-auto"
如果我的理解是正确的,这将创建一个命名空间,允许您引用在您自己的自定义视图或任何包含的库中定义的视图中定义的任何自定义属性。此命名空间与通常的“android”命名空间分开,该命名空间包含android SDK中包含的所有基本小部件和视图。
如果您使用来自多个库的自定义视图,如何避免“app”命名空间中的命名空间冲突?例如,假设“library1”定义了一个自定义视图“Lib1View1”,它具有属性“color”。 “library2”定义了一个自定义视图“Lib2View1”,它也有一个属性“color”。当一个引用app:color
时,如何避免命名空间冲突?
res-auto可能足以检测本地标记的上下文感知(即在<com.library1.Lib1View1>
标记中,app:color
属性仅引用library1的标记),但标记何时是从父布局继承?例如,如果窗口小部件包含在诸如ConstraintLayout
的布局中,则窗口小部件将具有与其关联的各种app:layout_*
标记。但是,可以想象有一个自定义视图也具有layout_*
标记。那么哪个标签优先?
有没有办法为自定义库显式定义单独的命名空间?即
xmlns:custom1="http://schemas.android.com/apk/res-lib1"
xmlns:custom2="http://schemas.android.com/apk/res-lib2"