2009-09-22 13 views
18

BiorącJak uzyskać dostęp do Android: etykiety dla działalności

Android.xml:

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

Strings.xml:

<string name='icon_list_activity_name>Icon List</string> 

Jak uzyskać dostęp do łańcucha „Ikona Lista " podana IconListActivity.class?

+0

Czy możesz dać użytkową przypadku, gdy chcesz to zrobić? Może uda się znaleźć obejście. Również, czy IconListActivity.class jest w tym samym apk czy nie? – bhatt4982

+0

IconListActivity to działalność, którą piszę, ucząc się programowania na Androida. – Scott

+0

dlaczego nie po prostu użyć 'R.string.icon_list_activity_name' w miejscu, gdzie jest to potrzebne? – gMale

Odpowiedz

26

PackageManager#getActivityInfo() zwraca strukturę ActivityInfo, która ma pole labelRes i name, z których jedna powinna zawierać to, czego potrzebujesz.

+3

Idealnie! Dokładnie to, czego potrzebowałem. Dzięki! – Scott

0

Według documentation for the activity element atrybut name xml jest dla Activity podklasy, to znaczy że jest nie nic wspólnego z nazwą działania. labelRes to pole wymagane w tym miejscu (odpowiadające atrybutowi XML label).

6

Jeśli masz ComponentName, można wykonać następujące czynności:

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

Od każdej działalności:

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

Mamy będącego próbuje uzyskać etykietę, ale labelRes zwrot 0 i name jest prosta nazwa klasy działania.

Sposób udało nam się uzyskać ciąg z etykietą (jesteśmy targetting API 23, btw) używał nonLocalizedLabel murawę:

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