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

时间:2010-08-15 18:26:07

标签: android label android-manifest titlebar launcher

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

我想给我的应用程序启动器图标(在启动屏幕上显示的图标!)一个不同的,更短的标题。似乎发射器从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)中再次设置长标题也没有用,因为短名称会在短时间内对用户可见,但需要足够长的时间才能注意到!

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

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

编辑:拥有自定义标题栏的另一个原因是,它看起来不像默认的标题栏,我必须明确地做一些事情,让它在每个设备上看起来都很相似!如果毕竟我不想要一个不同的外观,那么这不是一个解决方案!

7 个答案:

答案 0 :(得分:464)

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

旁注:&lt; intent-filter&gt;也可以有一个图标属性,但是   莫名其妙地,覆盖了指定的图标   活动。如果您打算使用本机,这可能对您很重要   SDK 11+中的ActionBar,它使用了指定的Icon和Logo   活性。

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

 <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将显示启动器图标。

答案 1 :(得分:34)

我一直在寻找同样的东西,这对我有用。

<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文件。

答案 2 :(得分:10)

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

狡猾而又值得。

答案 3 :(得分:4)

这可能无法满足你想要做的事情,但是你有没有想过创建一个非常简短地显示(使用默认标题)的启动画面,然后使用你选择的标题启动你的新实际“主要”活动使用setTitle(int)方法?我没有试过这个,看看它是否有效,但这可能会创造一个令人愉快的工作,但并没有表现出你想要达到的无缝性质。

答案 4 :(得分:2)

对于通过UPDATE myTable SET config = JSON_SET( config, '$.person.name', 'zeca', '$.person.details.age', '87' ) WHERE id = 127 方法使用支持/ Appcompat 工具栏的任何人,可以在工具栏XML中设置活动标题:

setSupportActionBar()

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

android.support.v7.widget.Toolbar

答案 5 :(得分:0)

您可以这样做:

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文件中,您只需设置应用的标题即可在启动器图标中显示。对于您的活动,您无需在那里设置标题。

答案 6 :(得分:0)

启动器实际上显示了声明

的活动(ies)的android:label和android:icon
<intent-filter>
    <action android:name="android.intent.action.MAIN" />
    <category android:name="android.intent.category.LAUNCHER" />
</intent-filter>

所以申请标签没用。