Пользовательские атрибуты Android на «нормальных» видах? - PullRequest
3 голосов
/ 25 июля 2011

После ознакомления с темой для Fede UberMusic я наткнулся на файл album_screen.xml. Ниже приведен источник этого файла. По сути, я заметил, что его темы имеют возможность использовать пользовательские представления, которые являются частью его приложения, и что они имеют это пространство имен XML вверху theme. Мне не хватает связи с тем, как он может применять свои атрибуты к представлениям, которые он не контролирует, и как Eclipse будет компилировать код ниже, в обязательном порядке. Я поместил URL http://schemas.uberdroidstudio.com/theme в адресную строку моего браузера, но ничего не появилось, и я не могу понять, где и как Eclipse знает атрибуты, которые поддерживает пространство имен. Заранее благодарю за помощь.

<?xml version="1.0" encoding="utf-8"?>
<merge
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:theme="http://schemas.uberdroidstudio.com/theme">
    <TextView  
        android:id="@id/artist"
        android:layout_width="wrap_content" 
        android:layout_height="wrap_content"
        android:layout_weight="0.0"
        theme:textFilter="uppercase" /> <!-- This is the interesting line -->

Ответы [ 2 ]

0 голосов
/ 11 августа 2011

Решение на самом деле не так сложно, как я изначально думал.Пространства имен XML - это произвольные строки, которые просто должны быть уникальными.Если ваше пространство имен не начинается с http://schemas.android.com/apk/res, оно не проверяется, а пакет APK не проверяется на declare-styleable или тому подобное.Теперь пользовательское пространство имен, если его очень просто реализовать, как показано в этом фрагменте кода в GitHub.Наконец, применение пользовательских атрибутов XML к «обычным» виджетам может быть выполнено с помощью LayoutInflater.Factory и вызова setFactory до того, как вы завышаете свои представления.Сложите все это вместе, и у вас получится очень управляемое по темам XML-приложение, такое как Fede UberMusic.

0 голосов
/ 26 июля 2011

Я подозреваю, что строка theme:textFilter="uppercase" на самом деле не влияет на (по-видимому, ванильный) TextView.

Что касается URL-адреса пространства имен, интересно, что вы не можете получить к нему доступ, поскольку он не выглядит как локально-стилизованный (в Android вы можете ссылаться на локально-стилизованное пространство имен как http://schemas.android.com/apk/res/your.package).+1 за новинку.

...