2011-06-26 17 views
2

アトリビュートが兄弟アトリビュートを参照することは可能ですか?同じ<style>に存在するものは可能ですか?例えば非テーマスタイルのシブリングスタイル属性へのアクセス

<style name="Widget.A"> 
    <item name="customBackground">something</item> 
    <item name="android:background">?customBackground</item> 
</style> 

にのみ適用されるテーマではなく、同じスタイルの中に存在する属性?修飾子参照するので、エラーが生成されます。

この機能は、Androidのすべてのバージョンとの適切な互換性を確保するために、私のライブラリにとって必要不可欠です。

答えて

2

いいえ、構文では、現在のテーマの属性のみを参照できます。カスタムテーマでその値を定義するためには、スタイルを書き直す必要があります。

+0

答えをありがとう。私はこれがそうであると考えていた。 1つの迅速なフォローアップ:スタイルXMLを 'values-v11'に入れることは、以前のAPIレベルで明示的に読み込み、手動で解析することが可能ですか? –

0

既知の属性「customBackground」がないため、コードでエラーが発生します。しかし、あなたは次の内容を同じフォルダ(res/values/)でXMLファイルを作成することによってそれを作成することができます。

<?xml version="1.0" encoding="utf-8"?> 
<resources> 
    <declare-styleable name="Widget.A"> 
     <attr name="customBackground" format="reference"/> 
    </declare-styleable> 
</resources> 

この宣言は、スタイルパラメータを持っているWidget.Aを、持っていることを教えてくれるcustomBackgroundと呼ばれ、この例では有効な値は他の属性への参照です。もちろん、format属性は必要なものに設定することができます。残念ながら、Androidのドキュメントにはこの種の宣言に関する明確な説明が含まれていないため、Androidソースコードのattrs.xmlをご覧ください。

+0

私はすでに実際の実装でこれを行っています。この例は、私が達成しようとしていることを示している最小のものです。 –

+0

Widget.Aに 'customBackground'という属性があると正しく宣言した場合、この属性の参照に問題はありません。少なくとも私はあなたの例とまったく同じスタイルを作ったことを確認することができ、問題なくコンパイルできます。どのようなエラーが出ますか? – Malcolm

+0

これはコンパイルされますが、 '? '修飾子はルートテーマで定義されている属性を参照していますが、私は同じウィジェットスタイル内で定義されているものを参照したいと考えています。 https://github.com/JakeWharton/StackOverflowQuestion6486594 –

関連する問題