如何为启动程序设置不同的标签而不是活动标题?

这个问题之前已经被问过 - 但是根本没有令人满意的答案! 所以我再试一次。

我想给我的应用程序启动器图标(在启动屏幕上显示的那个图标!)一个不同的,更短的标题。 看起来发射器从mainfest部分获得了关于主要活动标签的标签,如下所示:

<activity android:name="MainActivity" android:label="@string/app_short_name">
<intent-filter>
    <action android:name="android.intent.action.MAIN" />
    <category android:name="android.intent.category.LAUNCHER" />
</intent-filter>

我已将原来的引用更改为我的应用程序的名称@ string / app_name,并将其更改为另一个较短的字符串资源。

但是 - 大但是 :这当然也改变了这个活动的默认标题! 我不希望发生这种情况,有足够的空间来存放长时间的应用程序名称! 使用setTitle(int)方法在onCreate再次设置长标题也没有好处,因为短名称在短时间内对用户可见,但足够长以便注意!

而且 - 请不要通过引用自定义标题栏来回答我的问题......我不想走很长的路,只是因为一个愚蠢的字符串标题! 绘制自定义标题栏以获得如此小的效果是一件很痛苦的事情!

没有简单的方法可以让启动器显示不同的字符串? 谢谢你的回答!

编辑:为什么有一个自定义的标题栏的另一个原因是,它不会看起来像默认的标题栏,我不得不明确做的事情,使它看起来在每个设备上都相似! 如果毕竟,我不想要一个不同的外观,这不可能是一个解决方案!


显然<intent-filter>可以有一个标签属性。 如果不存在,标签将从父组件继承(Activity或Application)。 所以使用这个,你可以为启动器图标设置一个标签,同时仍然拥有带有自己标题的Activity。

请注意,虽然这适用于仿真器,但它可能无法在真实设备上工作,因为它取决于所使用的启动器实现。

http://developer.android.com/guide/topics/manifest/intent-filter-element.html

<activity
  android:name=".ui.HomeActivity"
  android:label="@string/title_home_activity"
  android:icon="@drawable/icon">
  <intent-filter android:label="@string/app_name">
    <action android:name="android.intent.action.MAIN" />
    <category android:name="android.intent.category.LAUNCHER" />
  </intent-filter>
</activity>

注意:<intent-filter>也可以有一个图标属性,但不可否认的是它不会覆盖活动中指定的图标。 如果您计划在SDK 11+中使用本机ActionBar,该工具栏使用活动上指定的图标和徽标,这对您可能很重要。

补充信息:标签是从活动而不是应用程序继承的。

 <application
        android:allowBackup="true"
        android:icon="@drawable/ic_launcher"       
        android:label="@string/app_name"
        android:theme="@style/AppTheme" >

        <activity
            android:name=".StartActivity"
            android:label="@string/app_long_name" >
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>

在这种情况下,如果我们没有像上面提到的那样放置标签,app_long_name将显示为启动器图标。


我正在寻找同样的东西,这是对我有用的东西。

<activity android:name="MainActivity" android:label="@string/app_short_name">
<intent-filter>
    <action android:name="android.intent.action.MAIN" />
    <category android:name="android.intent.category.LAUNCHER" />
</intent-filter>

这将为您的应用程序启动器图标提供一个简短的名称。

要将更大的名称添加到应用程序栏,您只需添加:

this.setTitle(getResources().getString(R.string.app_name));

到你的主要活动java文件。


Mark Renouf的解决方案对我不利(使用Nexus 4和Android 4.4)。 使用快捷方式时失败,快捷方式使用主要活动标签而不是应用程序名称。 我看到一些像GMail和Google Keep这样的应用程序工作正常。 但是,当你打开它们时,我会注意到它的标题是空白的,标题出现了(这似乎比使用setTitle()设置标题之前闪烁的应用程序名称更好)。

所以这里是我找到最佳解决方案

创建一个ActionBar不显示标题/标签的样式:

<style name="NoActionBarTitle" parent="android:Theme.Holo.Light.DarkActionBar">
    <item name="android:actionBarStyle">@style/NoActionBarTitle.ActionBar</item>
</style>

<style name="NoActionBarTitle.ActionBar" parent="@android:style/Widget.Holo.ActionBar">
    <item name="android:displayOptions">showHome|useLogo</item>
</style>

我正在使用导航抽屉并使用徽标(因为我为我的应用使用了徽标和图标)。 您可以使用任何内容但不使用showTitle 。 然后在AndroidManifest.xml中,设置MainActivity的主题:

<activity
    android:name="com.xx.xxx.MainActivity"
    android:logo="@drawable/ic_icon_padding"
    android:theme="@style/NoActionBarTitle">
    <intent-filter>
        <action android:name="android.intent.action.MAIN" />
        <category android:name="android.intent.category.LAUNCHER" />
    </intent-filter>
</activity>

然后,在MainActivity的onCreate()方法中,设置您的Action Bar的标题:

getActionBar().setTitle(R.string.your_title);

之后 ,你可以打电话给:

getActionBar().setDisplayShowTitleEnabled(true);

棘手但值得。

链接地址: http://www.djcxy.com/p/90745.html

上一篇: How to set different label for launcher rather than activity title?

下一篇: How to keep the spaces at the end and/or at the beginning of a String?