1

Google は M にこの新しい CTS ケースを追加しました。これはcts/tests/tests/content/src/android/content/res/cts/PrivateAttributeTest.java です。

このテスト ケースのコメントによると、フレームワーク/ベース/コア/res/res/values/public.xmlにベンダー カスタム属性 (type=attr, id=0x0101*) を追加しないことを強制します。

/**
 * Tests that private attributes are correctly placed in a separate type to
 * prevent future releases from stomping over private attributes with new public ones.
 */

ベンダーは、代わりに aapt に組み込まれているプラ​​イベート属性メカニズムを使用する必要があるようです。基本的には、独自の ID 範囲を持つ attr のエイリアスです。

1 つの注意点を除いて、動作します。

aapt ( framework/base/tools/aapt/Resource.cpp::writeLayoutClasses ) が次のように private 属性のコメントに無効なリンクを追加するため、javadoc の doclint チェックは private 属性によって中断されます。

public.xmlに「foo」という名前のプライベート属性を追加するとします。

<public type="attrprivate" name="foo" id="0x01110000"/>

ビューのスタイル可能です:

<resources>
    <declare-styleable name="View">
        <attr name="foo" format="reference|float">
    </declare-styleable>
</resources>

aaptによって生成される R.java は次のようになります。

/*
  blabla
  <p>This corresponds to the global attribute
  resource symbol {@link android.R.attr#foo}.
  @attr name android:foo
*/
public static final int View_foo = 87;

しかし{@link android.R.attr#foo}は android.R.attr.foo シンボルがないため無効です。

プライベート属性を正しく使用していますか? それとも今のところフレームワークの問題ですか?

ありがとう、ヘン

4

0 に答える 0