web-dev-qa-db-ja.com

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

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

アプリケーションランチャーアイコン(スタート画面に表示されるアイコン)に別の短いキャプションを付けたいと思います。次のように、ランチャーはメインアクティビティのラベルに関するメインフェストセクションからラベルを取得しているようです。

<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への元の参照を別の短い文字列リソースに既に変更しました。

しかし-大きなしかし:これはもちろんこのアクティビティのデフォルトのタイトルも変更します!そして、私はそれが起こることを望んでいませんでした、長いアプリケーション名のための十分なスペースがあります! setTitle(int)メソッドを使用してonCreateに長いタイトルを再度設定しても、ユーザーには短い名前が表示されますが、気付くのに十分な長さです。

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

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

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

263
Zordid

どうやら<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>はアイコン属性を持つこともできますが、アクティビティで指定されたアイコンをnotオーバーライドするのは不可解です。これは、アクティビティで指定されたアイコンとロゴを使用する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がランチャーアイコンで表示されます。

465
Mark Renouf

私は同じものを探していましたが、ここに私のために働いたものがあります。

<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ファイルに。

34
Anila

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

トリッキーだが価値がある。

10
Ferran Negre

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

4
Adriaan

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

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

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

Android.support.v7.widget.Toolbar

2
Maksim Ivanov

この問題の回避策を見つけました

manifest.xml

launcher(main)アクティビティAndroid:labelアプリの名前を記述します。

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

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

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

ここで、Launcher(main)アクティビティに与えるラベルを書きます。

1
Tanuj Yadav

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

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

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

0
Rahul

次のようなことができます:

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ファイルで、アプリのタイトルを設定するだけで、これがランチャーアイコンに表示されます。アクティビティでは、タイトルを設定する必要はありません。

0
Cristian