Как получить доступ к android: ярлык для Activity

Учитывая

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?

Ответ 1

PackageManager#getActivityInfo() возвращает структуру ActivityInfo, которая имеет поле labelRes и name, одно из которых должно иметь то, что вам нужно.

Ответ 2

Из любой активности:

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);

Ответ 3

Если у вас ComponentName, вы можете сделать следующее:

PackageManager pm = getPackageManager();
ActivityInfo activityInfo = pm.getActivityInfo (componentName, 0);
Log.d ("ActivityLabel", activityInfo.loadLabel (pm).toString ());

Ответ 4

Мы пытаемся получить метку, но 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);

Ответ 5

В соответствии с документацией для элемента активности атрибут name xml предназначен для подкласса Activity, то есть он ничего не значит делать с именем деятельности. labelRes - это требуемое здесь поле (соответствующее атрибуту label XML).