2016-09-14 1 views
0

私はAndroidアプリで作業しており、API 19以上をサポートする必要があります。だから、私のスタイルの構造は次のようになります。styles.xmlさまざまな修飾子でAndroidスタイルの継承を使用する方法

res 
    values 
      styles.xml 
    values-v21 
      styles.xml 

は私が

<style name="customButton" parent="Base.Widget.AppCompat.Button"> 
    <item name="android:focusable">false</item> 
    <item name="android:clickable">true</item> 
</style> 

を持っており、v21/styles.xmlに私は、これは動作しますが、それはないと思える

<style name="customButton" parent="customButton"> 
    <item name="android:elevation">10dp</item> 
</style> 

を持っています。 Androidのスタジオでは、循環参照について不平を言っています。それはv21/customButtonが技術的にはそれ自体を親として持っているからです。

v21/customButtonの名前をcustomButton21に変更することはできません。このスタイルを使用するすべてのバージョンを2つ作成する必要があるからです。 API21に追加された新しい属性は違いだけですが、

この問題を解決する正しい方法は何ですか?たぶんbase-style.xmlを作成し、それを特定のAPIスタイルで参照しますか?

PS:この質問は、APIだけでなく、すべての修飾子に適用されます。

答えて

0

は、私は、次の解決のために定住しています

attrs.xml

<?xml version="1.0" encoding="utf-8"?> 
<resources> 
    <attr name="buttonStyle" format="reference" /> 
</resources> 

値/のstyles.xml

<resources> 
    <style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar"> 
     <item name="@attr/buttonStyle">@style/buttonStyleBase</item> 
    </style> 

    <style name="buttonStyleBase"> 
     <item name="android:gravity">left</item> 
     <item name="android:textSize">20sp</item> 
    </style> 
</resources> 

値-V21 /のstyles.xml

<resources> 
    <style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar"> 
     <item name="@attr/buttonStyle">@style/buttonStyle21</item> 
    </style> 

    <style name="buttonStyle21" parent="buttonStyleBase"> 
     <item name="android:elevation">15dp</item> 
    </style> 
</resources> 

そしてそれを使用する:

<Button 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:text="Hello World!" 
     style="?attr/buttonStyle" /> 

このように、私が必要とするほど複雑な基本スタイルを継承し、別のSDKバージョンに関連する変更のみを適用することができます。

関連する問題