Exemple de tirant attribut standard (arrière-plan) dans un vue personnalisée qui a son propre style par défaut. Dans cet exemple, la vue personnalisée PasswordGrid s'étend GridLayout. J'ai spécifié un style pour PasswordGrid qui définit une image de fond en utilisant l'attribut android standard android: fond.
public class PasswordGrid extends GridLayout {
public PasswordGrid(Context context) {
super(context);
init(context, null, 0);
}
public PasswordGrid(Context context, AttributeSet attrs) {
super(context, attrs, R.attr.passwordGridStyle);
init(context, attrs, 0);
}
public PasswordGrid(Context context, AttributeSet attrs, int defStyle) {
super(context, attrs, defStyle);
init(context, attrs, defStyle);
}
private void init(Context context, AttributeSet attrs, int defStyle) {
if (!isInEditMode()) {
TypedArray stdAttrs = context.obtainStyledAttributes(attrs,
new int[] { android.R.attr.background }, // attribute[s] to access
defStyle,
R.style.PasswordGridStyle); // Style to access
// or use any style available in the android.R.style file, such as
// android.R.style.Theme_Holo_Light
if (stdAttrs != null) {
Drawable bgDrawable = stdAttrs.getDrawable(0);
if (bgDrawable != null)
this.setBackground(bgDrawable);
stdAttrs.recycle();
}
}
}
Voici une partie de mes styles.fichier xml:
<declare-styleable name="passwordGrid">
<attr name="drawOn" format="color|reference" />
<attr name="drawOff" format="color|reference" />
<attr name="pathWidth" format="integer" />
<attr name="pathAlpha" format="integer" />
<attr name="pathColor" format="color" />
</declare-styleable>
<style name="PasswordGridStyle" parent="@android:style/Widget.GridView" >
<!-- Style custom attributes. -->
<item name="drawOff">@drawable/ic_more</item>
<item name="drawOn">@drawable/ic_menu_cut</item>
<item name="pathWidth">31</item>
<item name="pathAlpha">129</item>
<item name="pathColor">@color/green</item>
<!-- Style standard attributes -->
<item name="android:background">@drawable/pattern_bg</item>
</style>
Le même problème existe avec la Galerie tutoriel, j'ai vu des solutions de contournement qui rendent le travail tutoriel mais aucune explication quant à la façon dont le tutoriel devrait être fixé en utilisant uniquement des classes de SDK et ne pas ajouter votre propre xml avec le styleable dedans. Le tutoriel est à http://developer.android.com/resources/tutorials/views/hello-gallery.html le code est dans le "ImageAdapter (Context c)" Constructeur – AGrunewald
Voici une discussion similaire http://stackoverflow.com/q/8793183/1307690 – Lemberg