49 votes

styles héritage multiple

Existe-t-il un moyen de faire en sorte qu'un style hérite de plusieurs autres styles, au lieu d'être limité à :

<style name="WidgetTextBase">
    <item name="android:typeface">serif</item>
    <item name="android:textSize">12dip</item>
    <item name="android:gravity">center</item>
</style>

<style name="BOSText" parent="WidgetTextBase">
    <item name="android:textColor">#051C43</item>
</style>

J'aimerais que BOSText hérite également de :

<style name="WidgetTextHeader">
    <item name="android:textStyle">bold</item>
<style>

0 votes

Est-ce que cela peut être utile ? stackoverflow.com/questions/4851175/

42voto

Jonas Points 1027

Les styles ne prennent pas en charge l'héritage multiple (du moins pas depuis Android 3.2).

L'officiel docs dites :

Si vous utilisez la notation par points pour étendre un style, et que vous incluez également et que vous incluez également l'attribut parent, les styles parents remplacent tous les styles hérité de la notation point.

6 votes

Désolé, mais vous avez tort. Voir le lien developer.Android.com/guide/topics/ui/

28 votes

Vous avez mal compris la question (voir mon commentaire sur votre réponse ci-dessous). Vous avez raison de dire que vous pouvez construire des chaînes d'héritage de style comme A > B > C. La question était de savoir si vous pouviez faire (A, B) > C. C'est-à-dire qu'un style hérite de deux chaînes d'héritage indépendantes.

13 votes

Pourquoi cette réponse est-elle acceptée ? Les styles prennent EN CHARGE l'héritage multiple. Le site parent vous donne UN héritage et vous pouvez obtenir un second héritage à partir du nom du style, par exemple : <style name="Text.Bold" /> héritera du style appelé Text . Dans la documentation : Note: If you use the dot notation to extend a style, and you also include the parent attribute, then the parent styles override any styles inheritted through the dot notation.

10voto

Juann Strauss Points 1677

Vous ne pouvez hériter que d'un seul style. Cependant, vous pouvez également faire en sorte que le style hérité hérite d'un autre style, et ainsi de suite :

<style name="WidgetTextBase">
    <item name="android:typeface">serif</item>
    <item name="android:textSize">12dip</item>
    <item name="android:gravity">center</item>
</style>

<style name="WidgetTextHeader" parent="WidgetTextBase">
    <item name="android:textStyle">bold</item>
</style>

<style name="BOSText" parent="WidgetTextHeader">
    <item name="android:textColor">#051C43</item>
</style>

On ne peut pas hériter de plus d'un style, mais on peut peut mettre en place une chaîne d'héritage.

4voto

Ivan Syabro Points 96

Pour ceux qui cherchaient une solution pour fusionner plusieurs styles différents en un seul, vous pouvez utiliser

public void applyStyle (int resId, boolean force)

https://developer.Android.com/reference/Android/content/res/Resources.Theme#applyStyle(int,%20booléen) . Et l'appliquer de cette façon

context.theme.applyStyle(R.style.MyAdditionalStyle, false)

Chaque fois que vous spécifiez true comme deuxième argument, il remplace les valeurs existantes dans votre thème, et quand false il ajoute uniquement les valeurs non chevauchantes de R.style.MyAdditionalStyle

Je n'ai pas encore testé le scénario avec plusieurs styles, mais d'après la documentation, vous pouvez y arriver. C'est ainsi que cette approche peut être utilisée comme alternative à l'héritage multiple.

-2voto

f0ster Points 383

Il existe un attribut parent sur la balise de style qui devrait vous permettre d'hériter d'autres styles...

c'est-à-dire

<style name="CodeFont" parent="@style/WidgetTextBase">
   <item name="android:textStyle">bold</item>
</style>

http://developer.Android.com/guide/topics/ui/themes.html

10 votes

Le problème est que je voudrais avoir plusieurs attributs parentaux.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X