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

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

我想给我的应用程序启动器图标(在启动屏幕上显示的那个图标!)一个不同的,更短的标题。 看起来发射器从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/应用程序名称在这里不同,更短的string资源。

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

而且 – 请不要通过引用自定义标题栏来回答我的问题…我不想走很长的路,只是因为一个愚蠢的string标题! 绘制一个自定义标题栏,这是一个很痛苦的影响!

没有简单的方法给发射器一个不同的string显示? 感谢您的回答!

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

find解决scheme

显然<intent-filter>可以有一个标签属性。 如果不存在,则标签将从父组件inheritance(“活动”或“应用程序”)。 所以使用这个,你可以为启动器图标设置一个标签,同时仍然拥有自己标题的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>也可以有一个图标属性,但是莫名其妙地没有覆盖Activity中指定的图标。 如果您计划在SDK 11+中使用本机ActionBar,这对于您来说可能很重要,该SDK使用Activity上指定的图标和徽标。

补充信息:该标签是从活动inheritance,而不是应用程序。

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

所以这里是我find最好的解决scheme

创build一个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); 

狡猾但值得。

这可能不会满足你想要做什么,但你有没有想过创build一个显示非常简短的初始屏幕(使用默认标题),然后启动新的实际“主”活动与您select的标题使用setTitle(int)方法? 我没有试过这个看看它是否有效,但这可能会创造一个愉快的工作,并没有performance出你试图实现的不足无缝的性质。

我知道这是一个迟到的回应。 但是我希望这会对某人有所帮助。

实际(和最简单的)解决scheme

在AndroidManifest.xml文件中使用标签<activity-alias>创build一个<activity-alias> 。 给它一个你想设置的简短的标题(甚至图标)。

  • 一个别名可以是一个独立的实体,就像一个活动。 目标
  • 必须使用属性“targetActivity”指定活动。
  • 它可以有自己的标签,图标(任何活动的属性)。
  • 它可以有自己的一套intentfilter。

我find了解决这个问题的办法

manifest.xml

启动程序(main)活动android:label中写下您的应用程序的名称

这会使您的主要活动的标签与应用标签的标签相同。

然后,在你的Launcher(main)活动onCreate()函数中写下这个语句

 if (getSupportActionBar() != null) { getSupportActionBar().setTitle("main activity label"); } 

在这里写出你想要给你的Launcher(main)活动的标签。

你可以做这样的事情:

 public class FooBar extends Activity { @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); // change title requestWindowFeature(Window.FEATURE_CUSTOM_TITLE); setContentView(R.layout.main); getWindow().setFeatureInt(Window.FEATURE_CUSTOM_TITLE, R.layout.my_title); } } 

您必须创build一个自定义布局来保存标题。 它可以像在这种情况下称为my_title.xml一样简单:

 <?xml version="1.0" encoding="utf-8"?> <TextView xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="foo bar"/> 

在你的AndroidManifest.xml文件中,你只需要设置应用程序的标题,这就是将在启动器图标中显示的内容。 对于你的活动,你不需要在那里设置一个标题。

 The launcher actually shows android:label and android:icon for activity(ies) that declare <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> so application label is of no use.