2017-07-28 1 views
1

AndroidのAPIガイドStyles and Themesによると、スタイルは2つの異なる方法で別から継承することができますスタイルに親属性と点線の名前の両方がある場合、継承はどのように動作しますか?

<style>要素でparent属性は、次のことができます。

  • それはparent属性を持つことができますスタイルが属性を継承するスタイルを指定します。これを使用して、既存のスタイルから属性を継承し、変更または追加する属性のみを定義することができます。

  • それは点線の名前を持つことができる、などの長いスタイルから継承されているように、1つは、「自分自身を定義した」です:

    あなたが定義したスタイルを継承したい場合あなたはparentを使う必要はありません。代わりに、新しいスタイルの名前に継承するスタイルの名前の前にピリオドで区切ってドット表記を使用できます。

  • <style>が親と点線の名前の両方を持っている場合はどうなりますか?例えば、私が持っている場合:

    <style name="Foo.Bar.Baz" parent="Pen.Pinapple.Apple.Pen"> 
    

    Foo.BarPen.Pinapple.Apple.Pen両方からFoo.Bar.Baz継承していますか?属性がFoo.BarPen.Pinapple.Apple.Penの両方に設定されている場合、どの値がFoo.Bar.Bazになりますか?他のケースでは、属性がPen.Pineappleに設定されているのと同様に、parentの値がFoo.Barに設定されていますか?カスケーディングルールとは何ですか?そしてそれらはどこに文書化されていますか?

    答えて

    2

    両方を指定した場合は、parent属性が「優先」になります。

    <style name="MyStyle1"> 
        <item name="android:textColor">#00f</item> 
    </style> 
    
    <style name="MyStyle2"> 
        <item name="android:textSize">18sp</item> 
    </style> 
    
    <style name="MyStyle2.SubStyle" parent="MyStyle1"> 
        <item name="android:textStyle">bold</item> 
    </style> 
    

    enter image description here

    [OK]を
    +0

    、答えより具体的なケースが、一般的なルールは何ですか? attrがMyStyle2に設定されていてMyStyle1に設定されていない場合はどうなりますか?親の男を「ドット付きの親」に設定することは完全に無視されますか、明示的な親が優先されますか? –

    +0

    "attrがMyStyle2に設定されていて、MyStyle1に設定されていない場合はどうなりますか?"その正確なシナリオは私の答えでカバーされています。 'MyStyle2'の' android:textStyle'は完全に無視されます。 'parent' attrを設定することは、' '点線の親 ''が完全に無視されることを意味します(すべての_that_スタイルの親のように)。 –

    +0

    おっと!はい、私はあなたの例を誤解しました - 私はMyStyle1とMyStyle2の両方が同じattrを設定していると思っていました。申し訳ありません。 –

    関連する問題