Unexpected namespace prefix “app” found for tag RelativeLayout - Android?

六月ゝ 毕业季﹏ 提交于 2019-12-04 00:59:30
Khemraj

This issue is well known in while using data-binding in a layout.

Assume you want to use some data binding attribute with app: prefix then just adding xmlns:app... will not be enough. layout should be data binding layout wrapped with <layout tag.

Incorrect Approach:

e.g. I imported layout_toolbar_default.xml and using app:toolbarTitle to specify title.

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

    <include
        layout="@layout/layout_toolbar_default"
        app:toolbarTitle="@{@string/app_name}"
        />

</LinearLayout>

This will show error Unexpected namespace prefix "app" found.

Solution:

Wrap your layout with <layout tag because you are using binding attribute.

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

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        >

        <include
            layout="@layout/layout_toolbar_default"
            app:toolbarTitle="@{@string/app_name}"
            />

    </LinearLayout>
</layout>
Valery Miller

I had the same issue. Just take out your bottom-sheet layout into the separate file. And include it in the main layout via include tag.

Use of android.support.v7.widget.LinearLayoutCompat

<android.support.v7.widget.LinearLayoutCompat
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            app:behavior_hideable="true"
            app:behavior_peekHeight="80dp"
            app:layout_behavior="@string/string_bottom_sheet_behavior">

</android.support.v7.widget.LinearLayoutCompat>

Try setting your xmlns namespace once in the parent layout if you are going to use it multiple times.

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

Writing this declaration once in your parent CoordinatorLayout will suffice.

Hint: When using multiple layouts and views, try to implement the <include/> attribute. It will make your code clean and easily readable.

For someone who gets the similar error Unexpected namespace prefix “app” found on textView, you might need to change TextView to android.support.v7.widget.AppCompatTextView.

For people using androidx, if you have child views from some androidx view, they should also be the androidx view to be able to recognize app namespace prefix. For example instead of:

<ImageView/> you should use <androidx.appcompat.widget.AppCompatImageView/>

This is not harmfull and it provides support for lower api version if you use some features that could not be supported (like tints for ImageView) :)

Suraj Rao
xmlns:app="http://schemas.android.com/apk/res-auto"

This is set multiple times. Both in CoordinatorLayout and RelativeLayout. Remove the one in RelativeLayout. Declaring once in the file will suffice.

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!