2009-09-22 9 views
18

Dada¿Cómo accedo a android: etiqueta para una actividad

Android.xml:

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

strings.xml:

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

¿Cómo accedo a la cadena Icono' Lista ' dado IconListActivity.class?

+0

¿Puede por favor dar un caso de uso donde ¿quieres hacerlo? Tal vez podamos encontrar una solución. Además, si IconListActivity.class está en la misma apk o no? – bhatt4982

+0

IconListActivity es una actividad que estoy escribiendo mientras me enseño la programación de Android. – Scott

+0

¿por qué no usar simplemente 'R.string.icon_list_activity_name' en el punto donde lo necesita? – gMale

Respuesta

26

PackageManager#getActivityInfo() devuelve una estructura ActivityInfo, que tiene una labelRes y un campo name, uno de los cuales debe tener lo que necesita.

+3

¡Perfecto! Exactamente lo que necesitaba. ¡Gracias! – Scott

0

Según la documentation for the activity element, el atributo name XML es para una subclase Activity, es decir, es no nada que ver con el nombre de la actividad. labelRes es el campo deseado aquí (correspondiente al atributo XML label).

6

Si usted tiene la ComponentName, a continuación, puede hacer lo siguiente:

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

de cualquier actividad:

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

Hemos estar tratando de obtener la etiqueta, pero labelRes retorno 0 y name es el nombre de clase simple de la Actividad.

La forma en que hemos logrado obtener la cadena de la etiqueta (que apuntan a que estamos API 23, por cierto) estaba utilizando el campononLocalizedLabel:

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