アクティビティのタイトルではなくランチャーに別のラベルを設定するにはどうすればよいですか?


269

この質問は以前に尋ねられましたが、満足のいく答えはまったくありません!だから、もう一度やってみます。

アプリケーションランチャーアイコン(スタート画面に表示されるアイコン)に別の短いキャプションを付けたいです。ランチャーは、次のように、メインアクティビティのラベルに関する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-big BUT:もちろん、これもこのアクティビティのデフォルトのタイトルを変更します!そして、私はそれが起こりたくなかった、長いアプリケーション名のための十分なスペースがある!メソッドonCreateを使用して長いタイトルを再度設定してsetTitle(int)も、ユーザーには短い名前が短時間表示されますが、気づくのに十分な長さがあるため、効果がありません。

そして、カスタムのタイトルバーを参照して私の質問に答えないでください...愚かな文字列のタイトルのために、私はそれほど長くは進みたくありません!あまり効果がないカスタムタイトルバーを描画するのは面倒です。

ランチャーに別の文字列を表示するだけの簡単な方法はありませんか?ご回答ありがとうございます!

編集:カスタムタイトルバーを使用するのが面倒なもう1つの理由は、デフォルトのタイトルバーのように見えないためです。各デバイスで同じように表示するには、明示的に行う必要があります。そして、結局のところ、私が別の外観を望んでいない場合、それは解決策にはなりません!

回答:


470

どうやら<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>

補足:<intent-filter>はアイコン属性を持つこともできますが、不可解なことに、アクティビティで指定されたアイコンを上書きしませ。これは、アクティビティで指定されたアイコンとロゴを使用するSDK 11+のネイティブActionBarを使用する場合に重要になることがあります。

追加情報:ラベルは、アプリケーションではなくアクティビティから継承されています。

 <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はランチャーアイコンとともに表示されます。


5
ええ、それは素晴らしいです!今夜食べてみます。うわー、なぜそのようなことが適切に文書化されていないのですか?? !! 私はなぜこれらの奇妙なXML構造が気に入らないのか知っています... ;-)
Zordid

13
ああ、いや。今がっかり。純粋なAndroidランチャー(エミュレーター上!)は、ここで説明したことを実際に実行しますが、たとえばHTCのランチャーはインテントのラベルタグを無視します。:-(なんてばかげている!ハニカムを備えたAsus Eeeパッドもそのラベルに準拠していない
Zordid

2
では、アクティビティラベルは何ですか。残念です。これは文書化されていないので、ランチャーを作成する人はおそらく正しい動作を実装しないだろうと半分は思っていました。
Mark Renouf、2011

12
私のジンジャーブレッドネクサスワン、ネクサスS、および「新しい」リリースで動作します:-)悲しいことに、矛盾のために、私はこれを使用しないことをお勧めします。私も警告で答えを更新する傾向があります。
Mark Renouf、2011

3
なぜこれがこれほど多くの賛成票を持つのか、私にはわかりません。何かが機能していると想定する前に、実際のデバイスでコードをテストしないでください。このソリューションは、他の人が述べているように、実際のデバイスでは機能しません。私は4つのデバイス(バニラと非バニラのAndroid)でテストしましたが、何もしていません。これはエミュレータでのみ機能します。私が見つけた唯一の方法は、Anilaの回答で説明されているようにsetTitleを使用することでした。
ティアゴ

35

私は同じことを探していましたが、ここでうまくいきました。

<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ファイルに追加します。


ランチャーアクティビティのタイトルを変更する必要がある場合、これは必ず機能します。ただし、アイコン名は約1秒間点滅します。
rphello101 2012

2
アプリに空白のアクションバーが一瞬表示されることを気にしない場合(つまり、タイトルがない場合)、アクションバーのスタイルを変更してshowTitleから削除できますdisplayOptions。次に、次のonCreateようなアクティビティでタイトルをオンにできます。this.getActionBar()。setDisplayOptions(ActionBar.DISPLAY_SHOW_HOME | ActionBar.DISPLAY_SHOW_TITLE); これは、アイコン名の点滅よりも優れていますが、アプリケーションのすべてのアクティビティで、必要に応じてタイトルをオンにする必要があることを意味します。
BruceHill 2013年

ランチャーアクティビティのタイトルを変更する必要がある場合、これは必ず機能します。

なんでsetTitle(R.string.app_name);
arekolek 2017年

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()メソッドで、アクションバーのタイトルを設定します。

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

その後、あなたは呼び出すことができます:

getActionBar().setDisplayShowTitleEnabled(true);

トリッキーですが価値があります。


4

これはおそらくあなたがしたいことを満足させませんが、非常に短時間(デフォルトのタイトルで)表示し、setTitle(int)メソッドを使用して選択したタイトルで新しい実際の「メイン」アクティビティを起動するスプラッシュスクリーンを作成することを考えましたか??これが機能するかどうかを確認するためにこれを試したことはありませんが、達成しようとしていることのシームレスではない性質を示さない快適な作業が作成される可能性があります。


2

メソッドを介してSupport / Appcompat Toolbarを使用するsetSupportActionBar()場合は、アクティビティタイトルをToolbar XMLで設定できます。

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

これにより、マニフェストに設定されているアプリケーションとアクティビティのラベルが上書きされます。

android.support.v7.widget.Toolbar


1

私はこの問題の回避策を見つけ

manifest.xml

書き、あなたのアプリの名前をandroid:labelランチャー(メイン)活動

これにより、メインアクティビティのラベルがアプリのラベルと同じになります。

次に、Launcher(main)アクティビティonCreate()関数で次のステートメントを記述します

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

ここに、Launcher(main)アクティビティに付与するラベルを記述します。


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、ファイルあなただけのランチャーアイコンで示されようとしているものですアプリのためにタイトルを設定する必要があります。あなたの活動のためにそこにタイトルを設定する必要はありません。


1
アプリケーションのラベルがランチャーラベルを定義するものではなく、インストールされたアプリのリストでアプリケーションの名前がどのように定義されるかを設定するだけです(設定->アプリケーション->アプリケーションの管理)。このラベルもAndroidによって取得されます市場も。だから私はそれを変えたくない。実験してみたところ、ランチャーもこのアクティビティのタイトルを取得しています。それとは別に、あなたの解決策には私が欲しくないカットソータイトルが含まれています!これは、デフォルトのタイトルバーのようには見えません-または、デフォルトの動作を得るためだけに多くのことをしなければなりません-まったく良くありません!
Zordid 2010

うーん...それはさらに悪いです。私はあなたの解決策を試しました。しかし、タイトルバーはデフォルトのようには見えません。さらに悪いことに、デフォルトのタイトルバー(見たくない短い名前が表示されています)は、カスタムタイトルバーが表示される少し前に表示されます。したがって、このソリューションは、を使用してタイトルを設定するのと同じsetTitleです。:-(
Zordid 2010

0

ランチャーは実際に宣言するアクティビティのandroid:labelとandroid:iconを表示します

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

そのため、アプリケーションラベルは役に立ちません。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.