274

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

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

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

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

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

4

8 に答える 8

472

どうやら<intent-filter>label属性を持つことができます。存在しない場合、ラベルは親コンポーネント(アクティビティまたはアプリケーション)から継承されます。したがって、これを使用すると、独自のタイトルのアクティビティを保持しながら、ランチャーアイコンのラベルを設定できます。

これはエミュレーターでは機能しますが、使用されるランチャーの実装に依存するため、実際のデバイスでは機能しない場合があることに注意してください。

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>はアイコン属性を持つこともできますが、不可解なことに、アクティビティで指定されたアイコンをオーバーライドしません。これは、アクティビティで指定されたアイコンとロゴを使用するSDK11以降のネイティブ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がランチャーアイコンで表示されます。

于 2011-08-30T23:23:33.153 に答える
36

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

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

于 2012-04-05T10:28:49.923 に答える
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);

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

于 2014-04-28T08:27:49.077 に答える
4

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

于 2010-08-25T10:41:43.647 に答える
3

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

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

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

android.support.v7.widget.ツールバー

于 2017-12-02T21:53:39.530 に答える
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ファイルでは、ランチャー アイコンに表示されるアプリのタイトルを設定するだけです。あなたの活動のために、そこにタイトルを設定する必要はありません。

于 2010-08-15T18:48:39.713 に答える