Android:布局文件中的不同名称空间

Android:布局文件中的不同名称空间,android,android-layout,Android,Android Layout,我正在为我的应用程序使用Android支持库AppCompat,并尝试将搜索小部件添加到我的视图中。首先,我遇到了一个非常令人沮丧的错误,搜索小部件没有出现在屏幕上。以下是菜单xml文件: <menu xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto"> <item androi

我正在为我的应用程序使用
Android支持库AppCompat
,并尝试将
搜索小部件
添加到我的视图中。首先,我遇到了一个非常令人沮丧的错误,搜索小部件没有出现在屏幕上。以下是菜单xml文件:

<menu xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto">
    <item
        android:id="@+id/action_example"
        android:title="@string/action_example"
        app:showAsAction="withText|ifRoom" />

    <item android:id="@+id/search_bar"
        android:title="@string/search_title"
        android:icon="@drawable/ic_menu_search"
        android:showAsAction="always" (LINE ONE)
        android:actionViewClass="android.support.v7.widget.SearchView"/> (LINE TWO)
</menu>
我有谷歌,但没有帖子涉及我的问题


谢谢:)

看起来AppCompat将这些XML标记声明为自定义元素。下面是一个关于自定义元素的Q/a,可能会更清楚:

您使用自己的自定义名称空间“app”,因为对于较旧的android版本,android框架中不存在属性“showasaction”。因此,当您使用action compat库时,您需要为该属性声明自己的命名空间

来自开发者文档

使用支持库中的XML属性 请注意,上面的showAsAction属性使用标记中定义的自定义命名空间。这在使用支持库定义的任何XML属性时都是必要的,因为这些属性在旧设备上的Android框架中不存在。因此,您必须使用自己的名称空间作为支持库定义的所有属性的前缀。 如果菜单项同时提供标题和带有标题和图标属性的图标,则默认情况下操作项仅显示图标。如果要显示文本标题,请在showAsAction属性中添加“withText”。例如:

  • 首先,发生这种情况是因为您试图使用自定义视图自定义属性,该属性是为
    android.support.v7.widget.SearchView
    customview定义的
  • 例如:

    app:showAsAction="always", 
    app:actionViewClass="android.support.v7.widget.SearchView" 
    
  • 当我们使用android默认属性时,比如
    android:layout\u width=“match\u parent”
    android:layout\u height=“wrap\u content”
    ,它不会给出错误,因为我们已经为类似的属性定义了
    xmlns
    xmlns:android=”http://schemas.android.com/apk/res/android“
  • 因此,如果我们试图使用自定义视图自定义属性,那么我们必须为此定义xmlns
  • 在您的例子中,我看到您为SearchView
    xmlns:app=”定义xmlns的方式http://schemas.android.com/apk/res-auto“
    fine有一种方法,另一种方法是
    xmlns:app=”http://schemas.android.com/apk/res/**packagenameofSearchViewClass**“

  • 在第一种方式中,您给出了所有外部自定义视图自定义属性可用于are xml like support.v7和任何其他库,在第二种方式中,您给出了外部库自定义视图自定义属性可用于are xml的详细信息。

    请更正您答案的格式。只有代码应该以这种方式格式化
    <menu xmlns:android="http://schemas.android.com/apk/res/android"
        xmlns:app="http://schemas.android.com/apk/res-auto">
    
    app:showAsAction="always", 
    app:actionViewClass="android.support.v7.widget.SearchView"