Пример вытаскивания стандартного атрибута (фон) в который имеет свой собственный стиль по умолчанию. В этом примере пользовательский вид PasswordGrid extends GridLayout. Я задал стиль для PasswordGrid, который устанавливает фоновое изображение, используя стандартный атрибут android 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();
}
}
}
Это часть моих стилей.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>
Та же проблема существует с галереей Просмотреть учебник, я видел обходные пути, которые делают работу учебника, но никаких объяснений относительно того, как учебник должен быть зафиксирован с помощью только классов SDK и не добавляя свой собственный xml со стилем в нем. Учебное пособие находится по адресу http://developer.android.com/resources/tutorials/views/hello-gallery.html, код находится в «ImageAdapter (Context c)». Конструктор – AGrunewald
. Вот аналогичная дискуссия http://stackoverflow.com/q/8793183/1307690 – Lemberg