14

values/attrs.xml でいくつかの属性を定義したカスタム設定コントロールがあります。会話の焦点を絞るために、values/attrs.xml にある属性の例を次に示します。

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <declare-styleable name="MyCustomView">
        <attr name="android:text"/>
        <attr name="android:textColor"/>            
        <attr name="extraInformation" format="string" />
    </declare-styleable>
</resources>

属性を使用するには、使用したい場所で xmlns タグを使用します。これは次のようになります。

xmlns:custom="http://schemas.android.com/apk/res/com.conundrum.app.lib"

ここに問題があります。xmlns 定義は LIBRARY のパッケージ名を参照しており、このリソースは LIBRARY プロジェクトで正常にコンパイルされます。ただし、Library プロジェクトを含む Android プロジェクトのパッケージ名は異なり、Android はすべてのリソースをマージしようとします。この xmlns 定義に到達すると、含まれる Android プロジェクトでパッケージ名が異なるため、行き詰まります。

Android プロジェクトを含めてもまだ有効なライブラリ プロジェクトで xmlns 参照を使用するためのアイデアはありますか?

宣言スタイル可能オブジェクトは、Android チームがライブラリを検討したときの単なる見落としでしたか?

4

6 に答える 6

9

私は実際に styleable と libraries で多くのことを試しましたが、次のような観察結果があります。

メイン プロジェクトとインクルード ライブラリを含むプロジェクトがあるとします。

main
   |--- library
  • ライブラリに styleable が含まれている場合でも、含まれているライブラリを使用してアプリケーションをコンパイルしても問題はありません。たとえば、私のライブラリ ( http://code.google.com/p/tree-view-list-android/ ) の 1 つを含めることができます。そこには多くのスタイル可能な属性 (折りたたみ可能など) と、ライブラリ内でそれを使用するいくつかの XML があります。ライブラリを単独でコンパイルするか、含まれているライブラリとしてコンパイルするかに関係なく、すべてがコンパイルされ、うまく機能します。
  • 現在、ライブラリとメイン プロジェクトの両方に同じ名前のリソースがある場合、メイン プロジェクトのコンパイルで奇妙な問題が発生する可能性があります。最初は意味がわかりませんでしたが、今では仕組みがわかりました。たとえば、ライブラリ main.xml に android:id="@+id/some_id" があり、メイン プロジェクトに別の main.xml (some_id id なし) がある場合、R.id.some_id はライブラリをコンパイルすると生成されますが、メイン プロジェクトでは生成されません。これは、メイン プロジェクトのコンパイル エラーにつながる可能性があります。これは、含まれているライブラリ .java ファイルが R.id.some_id (欠落している) を使用する可能性が高いためです。最初は問題を誤解していて、id を動的に取得しようとしたのですが、
  • そして今、最も興味深い部分 - プロジェクトの layout.xmls でスタイル可能なパラメーターを参照する方法は? お気づきのように、次のコードは機能しません:xmlns:custom="http://schemas.android.com/apk/res/YOUR_LIBRARY_PACKAGE" 驚くべきことに、代わりに機能するのはxmlns:custom="http://schemas.android.com/apk/res/YOUR_MAIN_APP_PACKAGE"(!) です。これは確かに Android チームから見落とされているように見えますが、一度知ってしまえば問題なく機能します。
于 2011-06-27T22:09:17.253 に答える
6

使用するhttp://schemas.android.com/apk/res-auto

AndroidSVGプロジェクトの補足として、このソリューションがさりげなく提供されていることがわかりました。

余談: 名前空間の特別なスキーマ URL に注意してください。独自のプロジェクトのカスタム ビューを使用している場合は、パッケージ名に基づく URL を使用します。たとえばhttp://schemas.android.com/apk/res/com.example.customview。ただし、カスタム ビューは含まれているライブラリにあるため、res-auto ショートカットを使用する必要があります。アプリのビルド時に、実際のスキーマ URL が自動的に挿入されます。

(上記の引用文のタイプミスを修正しました- /res/ サブフォルダーがありません-)

于 2013-11-04T17:31:41.670 に答える
5

これはAndroidの既知の問題です。開発ツールの次のリリース(r13)で修正が予定されています。

于 2011-07-27T21:27:28.010 に答える
3

私も同じ問題を抱えていました。私のアプリは、ライブラリ プロジェクトのスタイル設定可能な xml を検出しませんでした。

私はこれを試しました:

マイ ライブラリ プロジェクト パッケージ: com.lib.mylibrary マイ アプリケーション プロジェクト パッケージ: com.app.myapp

私は試したxmlns:custom="http://schemas.android.com/apk/res/com.app.myapp

それ以外のxmlns:custom="http://schemas.android.com/apk/res/com.lib.mylib

それはうまくいきました。試す

xmlns:custom="http://schemas.android.com/apk/res/<your app package>

それ以外の

xmlns:custom="http://schemas.android.com/apk/res/<your lib project package>

私はここでこのアイデアを得ました

于 2012-03-15T12:43:10.997 に答える
1

少し遅れているかもしれませんが、この問題は開発ツールの最新 (r14) リリースで修正されているようです。

于 2011-10-19T14:57:42.723 に答える