Intereting Posts
Вспышка приложения сразу после публикации в Google Play Android: переменная имеет неправильное значение во время цикла Android In-app robotmedia: восстановление транзакций Корневые привилегии для приложения Android (полное приложение. Не только несколько команд) Android, как поставить диалоговое окно после нажатия кнопки «Назад» Установка модуля Genymotion Eclipse Консоль разработчика Google Play: приложение застряло в «Обновление обработки» Настройка цвета фона элемента макета Android Ожидание асинхронного обратного вызова в Android IntentService Использование ArrayAdapter с AlertDialog и .setAdapter (Android MediaPlayer) Как я могу назвать setAudioStreamType (), если MediaPlayer.create () неявно вызывает prepare ()? Последствия поддержки нескольких пользователей Android (новые в версии 4.2) для модели данных на стороне сервера (например, android_id) Samsung Galaxy S4 сопоставляет значок Actionbar Повторное действие андроида при нажатии и удержании кнопки Кто-нибудь знает, как использовать PagerTitleStrip в Android

Что такое AttributeSet и как я могу его использовать?

Что такое AttributeSet в Android?

Как я могу использовать его для своего пользовательского представления?

Solutions Collecting From Web of "Что такое AttributeSet и как я могу его использовать?"

AttributeSet – это набор свойств, указанных в файле ресурсов xml. Вы не должны делать ничего особенного в своем пользовательском представлении. View(Context context, AttributeSet attrs) для инициализации представления из файла макета. Просто добавьте этот конструктор в свое пользовательское представление. Ознакомьтесь с примером пользовательского представления в SDK, чтобы увидеть его использование.

Поздний ответ, хотя и подробное описание, для других.

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 WashingMachineView(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); } 

Теперь мы можем использовать эти свойства для нашего RectangleView в вашем макете xml, и мы получим эти значения в конструкторе RectangleView .

 app:radius_dimen app:circle_background app:rectangle_background 

Вы можете использовать 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 } 

Когда представление создается из макета XML, все атрибуты в теге XML считываются из пакета ресурсов и передаются конструктору вида в качестве AttributeSet

Хотя можно напрямую считывать значения из AttributeSet , у этого есть некоторые недостатки:

  • Ссылка ресурсов в значениях атрибутов не разрешена
  • Стили не применяются

Вместо этого передайте AttributeSet для obtainStyledAttribute() . Этот метод возвращает массив TypedArray значений, TypedArray и стилизованных.