在android:name值中使用$symbol



我正在尝试理解android中的一些代码。我看到

<activity
android:name="Settings$DemoRangeActivity"

有人能解释名称中$符号的意义或用法吗。我找不到任何名为DemoRangeActivity的活动。这是我想要的吗?

感谢

Settings$DemoRangeActivity是对Settings类中定义的内部类DemoRangeActivity的引用。如果您注意到这个类在清单中被引用,但实际上没有在Settings类中定义,那么一旦这个特定类作为Activity打开,应用程序就会崩溃。

在AOSP的设置应用程序部分,更具体地说,在Settings.java文件中,与设置应用程序相关的每个活动都在文件底部引用,并带有一个空正文。它们都扩展了Settings类。这涉及到以下内容:

/*
 * Settings subclasses for launching independently.
 */
public static class BluetoothSettingsActivity extends Settings { /* empty */ }
public static class WirelessSettingsActivity extends Settings { /* empty */ }
...

正如您所提到的,这些文件中的每一个通常都有一个在单独的源文件中实现的相关片段,该文件扩展了SettingsPreferenceFragment类。这样做是为了让您的片段(在另一个文件中实现)可以作为一个活动单独启动。如果仔细观察,Settings类就是PreferenceActivity

如果您要将自己的片段添加到Settings应用程序,您可能需要在Settings.java文件及其清单文件中声明它。因此,基本上,您将在一个单独的文件中有一个DemoRange片段,以及在Settings.java和清单文件中声明的DemoRangeActivity,这样的声明的示例是:

<!-- Demo range settings activity -->
<activity android:name="Settings$DemoRangeActivity">
   <intent-filter>
       <action android:name="android.intent.action.MAIN" />
       <category android:name="android.intent.category.DEFAULT" />
       <category android:name="com.android.settings.SHORTCUT" />
   </intent-filter>
   <!-- Here is your actual binding between the activity and the fragment -->
   <meta-data android:name="com.android.settings.FRAGMENT_CLASS"
      android:value="com.android.settings.DemoRange" />
   <meta-data android:name="com.android.settings.TOP_LEVEL_HEADER_ID"
       android:resource="@id/demo_range_settings" />
</activity>

相关内容

最新更新