如何访问活动的android:label

如何访问活动的android:label,android,Android,给定 Android.xml: <activity android:name='.IconListActivity' android:label='@string/icon_list_activity_name' /> Strings.xml: <string name='icon_list_activity_name>Icon List</string> PackageManager#getActivityInfo()返回一个ActivityIn

给定

Android.xml:

<activity android:name='.IconListActivity'
  android:label='@string/icon_list_activity_name'
/>

Strings.xml:

<string name='icon_list_activity_name>Icon List</string>
PackageManager#getActivityInfo()
返回一个
ActivityInfo
结构,该结构有一个
labelRes
和一个
name
字段,其中一个字段应该包含您所需的内容。

根据,
name
xml属性用于
Activity
子类,也就是说,这与活动的名称无关
labelRes
是此处需要的字段(对应于
label
XML属性)。

如果您有,则可以执行以下操作:

PackageManager pm = getPackageManager();
ActivityInfo activityInfo = pm.getActivityInfo (componentName, 0);
Log.d ("ActivityLabel", activityInfo.loadLabel (pm).toString ());
从任何活动中:

String label = null;
try {
    label = getResources().getString(
        getPackageManager().getActivityInfo(getComponentName(), 0).labelRes);
    } catch (PackageManager.NameNotFoundException e) {
        e.printStackTrace();
    }
Log.d(LOG_TAG, "Activity Label: " + label);

我们正在尝试获取标签,但是
labelRes
return
0
name
是活动的简单类名

我们设法从标签中获取字符串的方法(我们的目标是API 23,顺便说一句)是使用nonLocalizedLabel字段:

ComponentName cn = new ComponentName(this, MainActivity.class);
ActivityInfo info = getPackageManager().getActivityInfo(cn, 0);
Log.d(LOG_TAG, "label == " + info.nonLocalizedLabel);

您能给出一个您希望这样做的用例吗?也许我们能找到解决办法。另外,IconListActivity.class是否在同一apk中?IconListActivity是我在自学Android编程时编写的一项活动。为什么不在需要时使用
R.string.icon\u list\u activity\u name
呢?太好了!正是我需要的。谢谢