【问题标题】:How do I access android:label for an Activity如何访问 android:label 的 Activity
【发布时间】:2015-10-15 01:24:32
【问题描述】:

给定

Android.xml:

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

字符串.xml:

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

我如何访问给定 IconListActivity.class 的字符串 'Icon List'

【问题讨论】:

  • 你能给出一个你希望这样做的用例吗?也许我们可以找到解决方法。另外,IconListActivity.class 是否在同一个 apk 中?
  • IconListActivity 是我在自学 Android 编程时编写的一个活动。
  • 为什么不在需要的时候使用R.string.icon_list_activity_name

标签: android


【解决方案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 返回 0name 是 Activity 的简单类名。

      我们设法从标签中获取字符串的方式(我们的目标是 API 23,顺便说一句)是使用 nonLocalizedLabel 字段:

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

      【讨论】:

        【解决方案5】:

        根据documentation for the activity elementname xml 属性用于Activity 子类,即它与活动名称无关labelRes 是这里想要的字段(对应于label XML 属性)。

        【讨论】:

          猜你喜欢
          • 2015-05-24
          • 2013-02-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多