Intereting Posts
Почему 0dp считается улучшением производительности? Конечные точки Google Cloud: verifyToken: длина подписи неверна Как показать 2 просмотра камеры рядом? Проверить наличие файла в папке активов андроидов? Как я могу вызвать функцию в моем основном классе Activity из пользовательского представления галереи в Android? BasicAuthentication в android для веб-просмотра не работает Как добавить значок в диалоговом окне предупреждения перед каждым элементом? PhoneGap – JSON Сохранение данных локально на устройстве Android DatePickerDialog: установите минимальную и максимальную дату для выбора SoftKeyboard открыть и закрыть прослушиватель в Android-приложении? Проблемы с MediaPlayer, исходные ресурсы, остановка и запуск Как я могу применить тему HoloEverywhere android при использовании ActionBarSherlock? Android BLE Beacon scan Как объединить данные из двух отдельных таблиц в один курсор? Плавающая кнопка действия, прикрепленная якорем, не скрывающаяся при прокрутке элементов RecyclerView медленно

Может ли кто-нибудь объяснить мне декларируемый XML-тег в этом примере и теорию его использования?

Я читаю «Начало разработки Android 4», и в главе 5 он рассказывает о Gallery и ImageVievs и вводит декларируемый XML-тег без объяснения его цели. Я тоже пытался найти некоторую информацию также по ссылке, но не повезло. Например, мы Имеют следующее:

RES / значения / attrs.xml

<?xml version=”1.0” encoding=”utf-8”?> <resources> <declare-styleable name=”Gallery1”> <attr name=”android:galleryItemBackground” /> </declare-styleable> </resources> 

example.java

 public class GalleryActivity extends Activity { [...] public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); Gallery gallery = (Gallery) findViewById(R.id.gallery1); gallery.setAdapter(new ImageAdapter(this)); [...] } [...] public class ImageAdapter extends BaseAdapter { [...] int itemBackground; public ImageAdapter(Context c) { context = c; //---setting the style--- TypedArray a = obtainStyledAttributes( R.styleable.Gallery1); itemBackground = a.getResourceId( R.styleable.Gallery1_android_galleryItemBackground, 0); a.recycle(); } public View getView(int position, View convertView, ViewGroup parent) { ImageView imageView; [...] imageView.setBackgroundResource(itemBackground); return imageView; } } } 

Я несколько раз читал код, и я не совсем понимаю цель определения этой галереальной галереи с единственным ребенком attr только с атрибутом имени .. вы можете мне помочь? Является ли это galleryItemBackground чем-то, предоставляемым системой, или это что-то определено нами? Что мы делаем в этом фрагменте кода?

Спасибо заранее за любую помощь!

Solutions Collecting From Web of "Может ли кто-нибудь объяснить мне декларируемый XML-тег в этом примере и теорию его использования?"

Этот тег является частью набора предварительных атрибутов Android, определенных в R.Styleable , которые можно передать отдельно от настраиваемого тега с тегом из префикса пространства имен android: xml перед именем атрибута.

Этот конкретный атрибут описывается как:

Предпочитаемый фон для элементов галереи. Это должно быть установлено в качестве фона любых Представлений, которые вы предоставляете от адаптера.

Вы правы, однако, что для специальных тегов атрибутов требуется не только имя атрибута, но и его тип, например добавление пользовательского элемента в ваш файл attrs.xml может выглядеть так:

 <?xml version="1.0" encoding="utf-8"?> <resources> <declare-styleable name="MyCustomView"> <attr name=”android:galleryItemBackground” /> <attr name="myCustomAttr" format="string" /> </declare-styleable> </resources> 

Обратите внимание на отсутствие пространства android: namespace во втором атрибуте.

Редактировать:

Есть ли официальная страница документации, которая подробно объясняет эту статью?

Ознакомьтесь с R.attr (нажмите для ссылки) для различных атрибутов, включенных в Android. Вам не нужно объявлять для них тип, потому что все они уже объявлены. Чтобы узнать, какой тип был объявлен для определенного атрибута, найдите описание для интересующего вас. galleryItemBackground – это, как вы можете ожидать, ссылка на другой ресурс; Другие возможности – булевы, поплавки, цвета и т. Д.

Дополнительные ссылки: Andtoid использует <declare-styleable> для создания AttributeSet . TypedArray используется для анализа AttributeSet .

Если целью кода выше […] является просто получение по умолчанию Drawable для фона представления, не могу ли я установить переменную itemBackground с помощью getDrawable (android.R.attr.galleryItemBackground)?

В этом примере трудно увидеть полезность этого шаблона, когда есть только один атрибут. Вы можете делать то, что вы просите, и это может быть проще. Конструкция, однако, является частью мантры Android, чтобы отделить «внешний вид» пользовательского интерфейса от его «функциональности», позволяя вам устанавливать определенные атрибуты в xml вместо того, чтобы делать все в коде. Возьмем класс View , например. Он имеет более 30 атрибутов, которые могут быть установлены в XML-файле (размер, дополнение, кликабельность, фокусируемость и т. Д.); Кто-то, создающий собственный подкласс View может установить несколько, все или ни одного из этих атрибутов в xml, и они автоматически обрабатываются для вас при создании представления. Существуют эквиваленты кода для установки атрибутов, если это необходимо, но представьте себе каждый раз, когда вы подклассифицируете View вы должны установить все атрибуты в коде вместо того, чтобы устанавливать их в xml.

Также было бы тривиальным вопросом просто сделать ваши собственные ресурсы для ваших классов, которые будут делать то же самое, однако использование встроенных стилей предоставит ресурсы по умолчанию, которые соответствуют внешнему виду и структуре Android, если вы не переопределите их.

Надеюсь это поможет.