3

私はAndroid Support Library AppCompat自分のアプリに使用していますが、自分のビューに追加しようとSearch Widgetしています。まず、検索ウィジェットが画面に表示されないという非常にイライラするエラーに遭遇しました。メニュー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>

数時間後、デバッグ。エラーに気づき、以下の 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"
        app:showAsAction="always"  (LINE ONE)
        app:actionViewClass="android.support.v7.widget.SearchView"/> (LINE TWO)
</menu>

お気づきのように、 と にわずかな違いがあるだけで、LINE ONELINE TWO変わりandroidますapp。それは魔法のように機能します。しかし、その2行の背後にある違いはわかりません。宣言するときの違いと意味:

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

私はグーグルを持っていますが、私の問題と質問に関連する投稿はありません。

ありがとう :)

4

3 に答える 3

4

古い Android バージョンの Android フレームワークには属性「showasaction」が存在しないため、独自のカスタム名前空間「app」を使用します。したがって、アクション互換ライブラリを使用する場合は、その属性に対して独自の名前空間を宣言する必要があります。

開発者ドキュメントから

サポート ライブラリの XML 属性の使用 上記の showAsAction 属性は、タグで定義されたカスタム名前空間を使用していることに注意してください。これは、サポート ライブラリで定義された XML 属性を使用する場合に必要です。これらの属性は、古いデバイスの Android フレームワークには存在しないためです。そのため、サポート ライブラリによって定義されたすべての属性のプレフィックスとして、独自の名前空間を使用する必要があります。メニュー項目がタイトルとアイコンの両方を (タイトルとアイコンの属性で) 提供する場合、アクション項目はデフォルトでアイコンのみを表示します。テキストのタイトルを表示したい場合は、showAsAction 属性に「withText」を追加します。例えば:

http://developer.android.com/guide/topics/ui/actionbar.html

于 2013-10-28T16:26:37.157 に答える
1

AppCompat は、これらの XML タグをカスタム要素として宣言しているようです。カスタム要素に関する Q/A を次に示します。おそらく、より明確になります: Declaring a custom android UI element using XML

于 2013-10-28T16:16:11.877 に答える
1
  1. まず、カスタム ビュー用に定義されたandroid.support.v7.widget.SearchViewカスタムビューのカスタム プロパティを使用しようとしているために、これが発生しました。

例:

app:showAsAction="always", 
app:actionViewClass="android.support.v7.widget.SearchView" 
  1. Androidのデフォルトプロパティを使用する場合、android:layout_width="match_parent" またはそのよう android:layout_height="wrap_content"にすでに定義しているため、エラーは発生しませんxmlnsxmlns:android="http://schemas.android.com/apk/res/android"
  2. したがって、カスタム ビューのカスタム プロパティを使用しようとする場合は、そのための xmlnsを定義する必要があります。
  3. あなたの場合、SearchView xmlns:app="http://schemas.android.com/apk/res-auto"のxmlnsをこのように定義しているのがわかります.1つの方法と他の方法がありますxmlns:app="http://schemas.android.com/apk/res/**packagenameofSearchViewClass**"

最初の方法では、すべての外部カスタム ビューのカスタム プロパティを使用できるのは、support.v7 やその他の lib のような xml であり、2 番目の方法では、外部ライブラリのカスタム ビューのカスタム プロパティを使用できる xml の詳細を指定しました。

于 2013-10-29T05:47:54.487 に答える