Що таке AttributeSet в Android?
Як я можу використовувати його для власного подання?
Що таке AttributeSet в Android?
Як я можу використовувати його для власного подання?
Відповіді:
Пізня відповідь, хоча і детальний опис, для інших.
AttributeSet (Документи Android)
Колекція атрибутів, як знайдено, пов’язану з тегом у документі XML.
В основному, якщо ви намагаєтеся створити власний вигляд і хочете передати такі значення, як розміри, кольори тощо, ви можете це зробити за допомогою AttributeSet
.
Уявіть, що ви хочете створити View
подібне нижче
Є прямокутник з жовтим фоном і коло всередині нього, припустимо, радіус 5dp, і зелений фон. Якщо ви хочете, щоб ваші подання приймали значення кольорів тла та радіуса через XML, ось так:
<com.anjithsasindran.RectangleView
app:radiusDimen="5dp"
app:rectangleBackground="@color/yellow"
app:circleBackground="@color/green" />
Ну ось де AttributeSet
використовується. Ви можете мати цей файл attrs.xml
у папці значень із наступними властивостями.
<declare-styleable name="RectangleViewAttrs">
<attr name="rectangle_background" format="color" />
<attr name="circle_background" format="color" />
<attr name="radius_dimen" format="dimension" />
</declare-styleable>
Оскільки це View, клас Java поширюється з View
public class RectangleView extends View {
public RectangleView(Context context, AttributeSet attrs) {
super(context, attrs);
TypedArray attributes = context.obtainStyledAttributes(attrs, R.styleable.RectangleViewAttrs);
mRadiusHeight = attributes.getDimensionPixelSize(R.styleable.RectangleViewAttrs_radius_dimen, getDimensionInPixel(50));
mCircleBackgroundColor = attributes.getDimensionPixelSize(R.styleable.RectangleViewAttrs_circle_background, getDimensionInPixel(20));
mRectangleBackgroundColor = attributes.getColor(R.styleable.RectangleViewAttrs_rectangle_background, Color.BLACK);
attributes.recycle()
}
}
Тож тепер ми можемо використовувати ці властивості до наших RectangleView
у вашому макеті xml, і ми отримаємо ці значення в RectangleView
конструкторі.
app:radius_dimen
app:circle_background
app:rectangle_background
getDimensionInPixel(50)
?
Ви можете використовувати AttributeSet, щоб отримати додаткові, спеціальні значення для вашого подання, які ви визначаєте в xml. Наприклад. Існує навчальний посібник із визначення користувацьких атрибутів, який стверджує: "можна читати значення з AttributeSet безпосередньо", але там не сказано, як насправді це зробити. Однак попереджає, що якщо ви не використовуєте стилізовані атрибути, тоді:
Якщо ви хочете проігнорувати всю стилізовану річ атрибутів і просто отримати атрибути безпосередньо:
example.xml
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:custom="http://www.chooseanything.org">
<com.example.CustomTextView
android:text="Blah blah blah"
custom:myvalue="I like cheese"/>
</LinearLayout>
Зверніть увагу, що є два рядки xmlns (xmlns = простір імен XML), другий визначається як xmlns: custom. Потім нижче цього звичаю: визначено myvalue.
CustomTextView.java
public CustomTextView( Context context, AttributeSet attrs )
{
super( context, attrs );
String sMyValue = attrs.getAttributeValue( "http://www.chooseanything.org", "myvalue" );
// Do something useful with sMyValue
}
AttributeSet - це набір властивостей, зазначених у файлі ресурсів xml. Вам не потрібно робити щось особливе у своєму власному поданні. View(Context context, AttributeSet attrs)
Викликається для ініціалізації виду з файлу макета. Просто додайте цей конструктор до власного подання. Перевірте замовлення Переглянути приклад в SDK , щоб побачити його використовувати.
android-sdk\samples\android-17\ApiDemos\src\com\example\android\apis\view
Коли подання створюється з XML-макета, усі атрибути в тезі XML зчитуються з набору ресурсів і передаються конструктору представлення як AttributeSet
Незважаючи на те, що можна зчитувати значення AttributeSet
безпосередньо, це має деякі недоліки:
Натомість перейдіть AttributeSet
до obtainStyledAttribute()
. Цей метод повертає TypedArray
масив значень, які були визначені та стилізовані.