Как установить другую метку для лаунчера, а не для названия действия?
-
28-09-2019 - |
Вопрос
Этот вопрос задавался раньше - но без какого-либо удовлетворительного ответа вообще!Так что я пробую еще раз.
Я хочу присвоить значку запуска моего приложения (тому, который отображается на стартовом экране!) другую, более короткую подпись.Похоже, что лаунчер берет свою метку из раздела 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)
метод тоже не приносит пользы, потому что короткое имя будет видно пользователю в течение короткого времени, но достаточно долго, чтобы заметить!
И - пожалуйста, не отвечайте на мой вопрос, ссылаясь на пользовательскую строку заголовка...Я не хочу проходить такой долгий путь только из-за дурацкого названия строки!Это такая мука - рисовать пользовательскую строку заголовка из-за такого незначительного эффекта!
Есть ли там легкого пути нет просто дать лаунчеру другую строку для отображения?Спасибо за ваши ответы!
Редактировать: Еще одна причина, по которой наличие пользовательской строки заголовка является проблемой, заключается в том, что она не будет выглядеть как строка заголовка по умолчанию, мне пришлось бы явно что-то делать, чтобы она выглядела одинаково на каждом устройстве!И это не может быть решением, если, в конце концов, я не хочу другой внешности!
Решение
Очевидно <intent-filter>
может иметь атрибут label.Если он отсутствует, метка наследуется от родительского компонента (либо Activity, либо Application).Таким образом, используя это, вы можете установить метку для значка запуска, сохраняя при этом Действие с собственным названием.
Обратите внимание, что, хотя это работает на эмуляторах, это может не сработать на реальных устройствах, поскольку это зависит от используемой реализации лаунчера.
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> также может иметь атрибут icon, но необъяснимым образом это так нет переопределите значок, указанный в действии .Это может быть важно для вас, если вы планируете использовать встроенную панель действий в SDK 11+, которая использует значок и логотип, указанные в действии .
Добавленная информация: Метка наследуется от Activity, а не от Приложения.
<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 ()).
Так вот Лучшее решение, которое я нашел:
Создайте стиль, где действие 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>
Я использую навигационный ящик и использую логотип (потому что я использую логотип и значок для моего приложения). Вы можете использовать все, что Не используйте Switchtitle. Отказ Тогда в AndroidManifest.xml установите тему на основную активность:
<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>
Затем в методе ONCREATE () основной активности установите заголовок вашей панели действий:
getActionBar().setTitle(R.string.your_title);
После этого, ты можешь позвонить:
getActionBar().setDisplayShowTitleEnabled(true);
Хитрый, но стоит.
Это, вероятно, не удовлетворяет то, что вы хотите сделать, но вы думали о создании экрана всплеска, который очень коротко отображается (с заголовком по умолчанию), а затем запускает новую фактическую «основную» активность с названием вашего выбора, используя setTitle(int)
Метод? Я не пробовал это увидеть, работает ли он, но это может создать приятную работу вокруг, которая не показывает менее чем бесшовную природу того, что вы пытаетесь достичь.
Для тех, кто использует Поддержка / AppCompat. Панель инструментов через то 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");
}
Здесь напишите этикетку, которую вы хотите дать на работу вашего Launcher (основной).
Вы можете сделать что-то вроде этого:
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 и Android: значок для деятельности (IES), которые объявляют
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
Так что этикетка приложений бесполезно.