这个问题以前曾问过 - 但根本没有令人满意的答案!所以我再次尝试。

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

但是 - 大 : :这当然会更改此活动的默认标题!而且我不希望发生这种情况,有足够的空间可容纳长时间的申请名称!再次设置长标题 onCreate 使用 setTitle(int) 方法也不好,因为用户很短的时间可以看到短名称,但足够长的时间可以注意到!

而且 - 请不要通过引用自定义标题Bar来回答我的问题...我不想走那么漫长的路,只是因为一个愚蠢的字符串标题!绘制自定义标题栏的痛苦很少!

有没有 没有简单的方法 只是给发射器一个不同的字符串以显示?感谢您的回答!

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

有帮助吗?

解决方案

显然 <intent-filter> 可以具有标签属性。如果不存在,则标签是从父组件(活动或应用程序)继承的。因此,使用此功能,您可以为发射器图标设置标签,同时仍具有其标题的活动。

请注意,尽管这对模拟器起作用,但它可能无法在真实设备上使用,因为它取决于使用的启动器实现。

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>

边注:u003Cintent-filter>也可以具有图标属性,但莫名其妙 不是 覆盖活动中指定的图标。如果您打算在SDK 11+中使用本机ActionBar,这对您来说可能很重要,SDK 11+使用该活动中指定的图标和徽标。

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

 <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中为MainAttivity设置主题:

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

然后,在Main Activity的OnCreate()方法中,设置您的动作栏标题:

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

之后, ,您可以致电:

getActionBar().setDisplayShowTitleEnabled(true);

棘手但值得。

这可能无法满足您想做的事情,但是您是否考虑过创建一个非常简短显示的飞溅屏幕(带有默认标题),然后使用您选择的标题,使用您选择的标题 setTitle(int) 方法?我没有尝试过来看看它是否有效,但这可能会创造出令人愉快的工作,这并不能显示出您要实现的目标的无缝性质。

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

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

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

android.support.v7.widget.toolbar

我找到了这个问题的解决方法

manifest.xml

写你的 应用程序的名称 在里面 android:label发射器(主要)活动.

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

然后,在 onCreate() 您的功能 发射器(主要)活动 写这个语句

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

在这里,写您要给发射器(主要)活动的标签。

您可以做这样的事情:

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 文件您只需要设置该应用程序的标题,这就是启动器图标中要显示的内容。对于您的活动,您无需在此设置标题。

启动器实际上显示了Android:标签和Android:for Activity(IES)的图标(IES)

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

因此,应用标签无用。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top