В Android XML, каково значение точки ("."), Предшествующей ссылке на класс или пакет?

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

В приведенном ниже фрагменте http://developer.android.com/guide/topics/search/search-dialog.html есть ".SearchableActivity"

<application ... >
  <activity android:name=".SearchableActivity" >
    <intent-filter>
      <action android:name="android.intent.action.SEARCH" />
    </intent-filter>
    <meta-data android:name="android.app.searchable"
               android:resource="@xml/searchable"/>
  </activity>
  ...
</application>

Другой пример - http://developer.android.com//training/sharing/receive.html - имеет ".ui.MyActivity"

<activity android:name=".ui.MyActivity" >

Что означают эти предшествующие ".", И когда / почему / следует их использовать? Что произойдет, если они будут опущены?

2 ответа

Решение

Андроид: имя

Цитирование документов

Имя класса, который реализует действие, подкласс Activity. Значением атрибута должно быть полное имя класса (например, "com.example.project.ExtracurricularActivity"). Однако для краткости, если первый символ имени является точкой (например, ".ExtracurricularActivity"), он добавляется к имени пакета, указанному в элементе. После того как вы опубликуете свое приложение, вы не должны изменять это имя (если вы не установили android:exported="false").

Если в манифесте у вас есть

package="com.example.layout"

И ваша активность находится в том же пакете, который вы можете иметь

<activity
        android:name=".ActivityName" 

Вместо ShortHand Вы также можете иметь

<activity
        android:name="com.example.layout.ActivityName" 

Если действие не объявлено правильно в манифесте, вы в конечном итоге ActivityNotFoundException

Если ваша деятельность находится в другом пакете, вы упоминаете полное имя класса

<activity
        android:name="packagename.ActivityName" 

Примечание: по умолчанию нет. Имя должно быть указано.

<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example"
android:versionCode="1"
android:versionName="1.0" >

<uses-sdk android:minSdkVersion="8" />

<application
    android:icon="@drawable/ic_launcher"
    android:label="@string/app_name" >
    <activity android:name=".DownloadActivity" >
        <intent-filter >
            <action android:name="android.intent.action.MAIN" />

            <category android:name="android.intent.category.LAUNCHER" />
        </intent-filter>
    </activity>
</application>

Смотрите приведенный выше пример файла манифеста

Вот "." означает название пакета

означает следующую строку

<activity android:name=".DownloadActivity" >

Вы можете написать 2 способа

<activity android:name="com.example.DownloadActivity" > and

<activity android:name=".DownloadActivity" > 

в вашем файле манифеста вы уже объявляете имя базового пакета сверху

package="com.example"

так что андроид дает нам возможность сделать это коротким

так что если вы используете "." для имен классов будет использоваться имя пакета, которое вы определили поверх файла манифеста, а система примет его как com.example.DownloadActivity.

Другие вопросы по тегам