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

这个问题以前也有人问过,但没有令人满意的答案!所以我再试一次。

我想给我的应用程序启动器图标(显示在开始屏幕上的那个图标!)一个不同的、更短的标题。似乎启动器从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的原始引用更改为一个不同的,更短的字符串资源。

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

并且-请不要通过引用自定义标题栏来回答我的问题…我不想走那么长的路,只是因为一个愚蠢的字符串标题!这是一个痛苦的自定义标题栏如此之小的效果!

是否有没有简单的方法只是给启动器一个不同的字符串来显示? 谢谢你的回答!< / p >

有一个自定义标题栏是痛苦的另一个原因是,它看起来不像默认的标题栏,我必须明确地做一些事情,使它在每个设备上看起来都一样!毕竟,如果我不想要一个不同的外表,那就不可能是一个解决方案!

99973 次浏览

你可以这样做:

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);
}
}

您必须创建一个自定义布局来保存标题。它可以像(在本例中称为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文件中,你只需要为应用程序设置标题,这将显示在启动器图标中。对于您的活动,您不需要在那里设置标题。

这可能不会满足你想要做的,但你有没有想过创建一个非常简单地显示(默认标题)的启动屏幕,然后使用setTitle(int)方法启动你选择的新“主”活动的标题?我还没有尝试过这样做,看看它是否有效,但这可能会创造一个令人愉快的工作,而不会显示出你试图实现的目标的不无缝本质。

显然<intent-filter>可以有一个label属性。如果它不存在,则从父组件(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>

Side Note: <intent-filter>也可以有图标属性,但是 方法中指定的图标被覆盖 活动。如果您计划使用本机,这可能对您很重要 SDK 11+中的ActionBar,其中使用图标和Logo 活动。< / p >

标签是从活动而不是应用程序继承的。

 <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和谷歌Keep这样的应用程序,效果很好。但当你打开他们,我注意到它就像一个时刻之间的标题是空白和标题出现(这似乎比应用程序名称闪烁之前设置使用setTitle()标题)。

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

创建一个动作栏不显示标题/标签的样式:

<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>

我使用导航抽屉和logo(因为我的应用程序使用了logo和图标)。你可以使用除不要使用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()方法中,设置你的动作栏的标题:

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

后,,你可以调用:

getActionBar().setDisplayShowTitleEnabled(true);

棘手但值得。

< p > 我找到了解决这个问题的办法 < br >
manifest.xml

将你的应用程序的名字写在发射器(主要)活动android:label中 这将使主活动的标签与应用程序标签相同。 < br > < br > 然后,在你的发射器(主要)活动onCreate()函数中写入这个语句

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

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

启动器实际上为声明的活动显示了android:label和android:icon

<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>

所以应用标签是没有用的。

对于任何通过setSupportActionBar()方法使用支持/ Appcompat工具栏的人来说,活动标题可以在工具栏XML中设置:

<android.support.v7.widget.Toolbar
android:id="@+id/toolbar"
app:title="@string/activity_title"
...
/>

这将覆盖清单中设置的应用程序和活动标签。

android.support.v7.widget.Toolbar . chrome浏览器