Что такое AttributeSet в Android?
Как я могу использовать его для своего пользовательского представления?
Что такое AttributeSet в Android?
Как я могу использовать его для своего пользовательского представления?
Поздний ответ, хотя и подробное описание, для других.
AttributeSet (Android Docs)
Набор атрибутов, найденных в теге в документе 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>
  Поскольку это вид, класс 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
		AttributeSet - это набор свойств, указанных в файле ресурсов xml. Вы не должны делать ничего особенного в своем пользовательском представлении. View(Context context, AttributeSet attrs) получает вызов для инициализации представления из файла макета. Просто добавьте этот конструктор в свой собственный вид. Ознакомьтесь с примером Пользовательский вид в SDK, чтобы увидеть его использование.
Вы можете использовать AttributeSet для получения дополнительных пользовательских значений для вашего представления, которые вы определяете в xml. Например. Там есть учебник по определению пользовательских атрибутов, который гласит: "Можно читать значения из атрибута напрямую", но он не говорит, как это сделать на самом деле. Однако он предупреждает, что если вы не используете стилизованные атрибуты, тогда:
Если вы хотите игнорировать все стилизованные атрибуты и просто получить атрибуты напрямую:
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
}
		Когда представление создается из макета XML, все атрибуты в теге XML считываются из пакета ресурсов и передаются конструктору вида как AttributeSet
Хотя можно напрямую считывать значения из AttributeSet, у этого есть некоторые недостатки:
Вместо этого передайте AttributeSet в obtainStyledAttribute(). Этот метод возвращает массив TypedArray значений, отложенных и стилизованных.