如何为启动程序设置不同的标签而不是活动标题?
这个问题之前已经被问过了,但是根本没有令人满意的答案! 所以我再试一次。
我想给我的应用程序启动器图标(在启动屏幕上显示的那个图标!)一个不同的,更短的标题。 看起来发射器从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.