Esempio di tirare fuori attributo standard (sfondo) in un vista personalizzata che ha il suo stile predefinito. In questo esempio la vista personalizzata PasswordGrid estende GridLayout. Ho specificato uno stile per PasswordGrid che imposta un'immagine di sfondo usando l'attributo android standard android: background.
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();
}
}
}
Ecco parte dei miei stili.file 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>
Lo stesso problema esiste con il tutorial Galleria, ho visto soluzioni che rendono il lavoro tutorial, ma nessuna spiegazione di come il tutorial dovrebbe essere fissata utilizzando solo le classi SDK e non aggiungendo il proprio xml con lo stylable in esso. Il tutorial è su http://developer.android.com/resources/tutorials/views/hello-gallery.html il codice è nel "ImageAdapter (Context c)" Costruttore – AGrunewald
Ecco una discussione simile http://stackoverflow.com/q/8793183/1307690 – Lemberg