В чем разница между "? Android:" и "@android:" в XML-файле макета Android? - PullRequest
40 голосов
/ 23 января 2011

В чем разница между "? Android:" и "@android:" в XML-файле макета Android? Они кажутся взаимозаменяемыми способами повторного использования ресурсов Android SDK.

Единственное обнаруженное мной отличие иллюстрируется следующим примером.

Здесь правый край TextView отображается выровненным по левому краю кнопки ImageButton

 <RelativeLayout
    android:id="@id/header"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:background="#888888">
    <TextView
        android:id="@android:id/text1"
        android:layout_alignParentLeft="true"
        android:text="blah blah"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_toLeftOf="@android:id/button1" />
    <ImageButton
        android:id="@android:id/button1"
        android:layout_alignParentRight="true"
        style="@style/PlusButton" />
</RelativeLayout>

Здесь, однако, правый край TextView выровнен с правым краем RelativeLayout. TextView перекрывает кнопку ImageButton.

<RelativeLayout
    android:id="@id/header"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:background="#888888">
    <TextView
        android:id="@android:id/text1"
        android:layout_alignParentLeft="true"
        android:text="blah blah"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_toLeftOf="?android:id/button1" />
    <ImageButton
        android:id="?android:id/button1"
        android:layout_alignParentRight="true"
        style="@style/PlusButton" />
</RelativeLayout>

Единственная разница между этими двумя раскладками заключается в использовании @android vs? Android. Оба компилируются без ошибок.

Большое спасибо.

1 Ответ

34 голосов
/ 23 января 2011

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

См. «Атрибуты стилей ссылок» здесь: accessing-resources

...