アクティビティタイトルではなく、ランチャーの異なるラベルを設定する方法は?
-
28-09-2019 - |
質問
この質問は以前に尋ねられました - しかし、満足のいく答えはまったくありません!だから私はもう一度やっています。
アプリケーションランチャーアイコン(Startscreenに表示されるもの!)に別の短いキャプションを付けたいと思います。ランチャーは、メインアクティビティのラベルに関するメインフェストセクションからラベルを取得しているようです。
<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)
メソッドも役に立たないため、メソッドも役に立ちませんが、短時間でユーザーに表示されますが、気付くのに十分な長さです。
そして - カスタムタイトルバーを参照して私の質問に答えないでください...私は愚かな文字列タイトルのために、その長い道のりを行きたくありません!効果がほとんどないためにカスタムタイトルバーを描くのは苦痛です!
ある 簡単な方法はありません ランチャーに別の文字列を表示するだけですか?答えをありがとう!
編集: カスタムタイトルバーを持つことが苦痛であるもう1つの理由は、デフォルトのタイトルバーのように見えないことです。各デバイスで同様に見えるようにするために明示的に物事を行う必要があります。そして、結局のところ、私が別の外観を望んでいない場合、それは解決策にはなり得ません!
解決
どうやら <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+でネイティブアクションバーを使用する予定がある場合に重要です。
追加情報: ラベルは、アプリケーションではなくアクティビティから継承されています。
<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のようなアプリが正常に動作しているのを見ました。しかし、それらを開くと、タイトルの間の瞬間が空白でタイトルが表示されているような瞬間に気付きます(settitle()を使用してタイトルを設定する前にアプリ名が点滅するよりも優れているようです)。
だからここにあります 私が見つけた最高の解決策:
アクションバーがタイトル/ラベルを表示しないスタイルを作成します。
<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);
トリッキーだが価値がある。
これはおそらくあなたがやりたいことを満たすことはありませんが、非常に簡単に表示されるスプラッシュ画面を作成することを考えましたか(デフォルトのタイトルで)、次に、新しい実際の「メイン」アクティビティを起動します。 setTitle(int)
方法?私はこれが機能するかどうかを確認するためにこれを試していませんが、それがあなたが達成しようとしていることのシームレスな性質よりも少ない性質を示していない心地よい回避を作成するかもしれません。
使用している人のために サポート / appcompat Toolbar経由 setSupportActionBar()
方法、アクティビティタイトルはツールバーXMLで設定できます。
<android.support.v7.widget.Toolbar
android:id="@+id/toolbar"
app:title="@string/activity_title"
...
/>
これにより、マニフェストで設定されたアプリケーションとアクティビティラベルがオーバーライドされます。
この問題の回避策を見つけました
の 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:label and android:アクティビティのアイコン(IES)が表示されます。
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
したがって、アプリケーションラベルは役に立ちません。