2009-09-22 9 views
18

GegebenWie kann ich Zugriff auf android: label für eine Aktivität

Android.xml:

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

strings.xml:

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

Wie kann ich auf die Zeichenfolge zugreifen ‚Icon Liste ' gegeben IconListActivity.class?

+0

Können Sie bitte einen Anwendungsfall geben, wo Sie möchten dies tun? Vielleicht können wir einen Workaround finden. Auch, ob die IconListActivity.class in der gleichen apk ist oder nicht? – bhatt4982

+0

IconListActivity ist eine Aktivität, die ich schreibe, während ich mir selbst Android-Programmierung beibringe. – Scott

+0

warum nicht einfach 'R.string.icon_list_activity_name' an der Stelle verwenden, wo Sie es brauchen? – gMale

Antwort

26

PackageManager#getActivityInfo() gibt eine ActivityInfo Struktur, die eine labelRes und ein name Feld hat, von denen haben sollten, was Sie brauchen.

+3

Perfekt! Genau das, was ich brauchte. Vielen Dank! – Scott

0

Nach den documentation for the activity element, das name xml-Attribut ist für eine Activity Unterklasse, das heißt es ist nicht etwas mit dem Namen der Aktivität zu tun. labelRes ist das gewünschte Feld (entspricht dem XML-Attribut label).

6

Wenn Sie die ComponentName haben, dann können Sie folgendes tun:

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

Von jeder Aktivität:

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

Wir haben versucht sein, das Etikett zu erhalten, aber labelRes Rückkehr 0 und name ist Der einfache Klassenname der Aktivität.

Die Art, wie wir es geschafft haben, den String aus dem Etikett zu bekommen (wir Targeting-API 23, btw) wurde mit der nonLocalizedLabel Feld:

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