Ответ 1
PackageManager#getActivityInfo()
возвращает структуру ActivityInfo
, которая имеет поле labelRes
и name
, одно из которых должно иметь то, что вам нужно.
Учитывая
Android.xml:
<activity android:name='.IconListActivity'
android:label='@string/icon_list_activity_name'
/>
strings.xml:
<string name='icon_list_activity_name>Icon List</string>
Как мне получить доступ к строке "Список значков", заданной IconListActivity.class?
PackageManager#getActivityInfo()
возвращает структуру ActivityInfo
, которая имеет поле labelRes
и name
, одно из которых должно иметь то, что вам нужно.
Из любой активности:
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);
Если у вас ComponentName, вы можете сделать следующее:
PackageManager pm = getPackageManager();
ActivityInfo activityInfo = pm.getActivityInfo (componentName, 0);
Log.d ("ActivityLabel", activityInfo.loadLabel (pm).toString ());
Мы пытаемся получить метку, но labelRes
return 0
и name
- это простое имя класса Activity.
То, как нам удалось получить String из метки (мы нацеливаем API 23, btw), использует поле nonLocalizedLabel:
ComponentName cn = new ComponentName(this, MainActivity.class);
ActivityInfo info = getPackageManager().getActivityInfo(cn, 0);
Log.d(LOG_TAG, "label == " + info.nonLocalizedLabel);
В соответствии с документацией для элемента активности атрибут name
xml предназначен для подкласса Activity
, то есть он ничего не значит делать с именем деятельности. labelRes
- это требуемое здесь поле (соответствующее атрибуту label
XML).