2009-09-22 6 views
18

DatoCome posso accedere ad Android: l'etichetta per un'attività

Android.xml:

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

strings.xml:

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

Come posso accedere alla stringa 'Icona Elenco ' dato IconListActivity.class?

+0

ti invitiamo a dare un caso d'uso in cui vuoi farlo? Forse possiamo trovare una soluzione alternativa. Inoltre, se IconListActivity.class è nello stesso apk o no? – bhatt4982

+0

IconListActivity è un'attività che sto scrivendo mentre mi insegno a programmare Android. – Scott

+0

perché non usare semplicemente "R.string.icon_list_activity_name' nel punto in cui ne hai bisogno? – gMale

risposta

26

PackageManager#getActivityInfo() restituisce una struttura ActivityInfo, che ha un campo labelRes e un campo name, uno dei quali dovrebbe avere quello che ti serve.

+3

Perfetto! Esattamente quello di cui avevo bisogno. Grazie! – Scott

0

Secondo il documentation for the activity element, l'attributo name XML è per un Activity sottoclasse, cioè è non nulla a che fare con il nome dell'attività. labelRes è il campo desiderato qui (corrispondente all'attributo XML label).

6

Se avete la ComponentName, allora si può fare quanto segue:

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

da qualsiasi attività:

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

Abbiamo essere cercando di ottenere l'etichetta, ma labelRes ritorno 0 e name è il semplice nome della classe dell'attività.

Il modo in cui siamo riusciti a ottenere la stringa dall'etichetta (stiamo rivolte API 23, btw) stava usando il nonLocalizedLabel campo:

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