Как изменить название Activity в Android?


227

Я использую

Window w = getWindow();
w.setTitle("My title");

изменить название моей текущей деятельности, но это не похоже на работу.

Кто-нибудь может подсказать мне, как это изменить?

Ответы:


498

Попробуйте установить setTitle самостоятельно, вот так:

setTitle("Hello StackOverflow");

1
setTitle не работает для меня, getSupportActionBar () и getActionBar () также обнуляют, я не могу установить заголовок во время выполнения.
Кодирование ниндзя

1
@Ninja_Coding, попробуйте вызвать его из Activity.
Джон Перри

241

Просто к вашему сведению, вы можете сделать это из XML.

В AndroidManifest.xml вы можете установить его с помощью

android:label="My Activity Title"

Или

android:label="@string/my_activity_label"

Пример:

    <activity
        android:name=".Splash"
        android:label="@string/splash_activity_title" >
        <intent-filter>
            <action android:name="android.intent.action.MAIN" />

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

28
Почему вы бы проголосовали за это? Приятно знать, что вы можете сделать это и из XML.
BullShark

8
Это в значительной степени основной способ сделать это со ссылками на внешние строки для облегчения локализации. Должен быть принят ответ.
Давор

10
Это не то же самое, что setTitle (). Установка свойства android: label для активности запуска также изменит название приложения на экране приложений телефона. Значок вашего приложения будет иметь заголовок «My Activity Title».
Дорон Зехави

2
@doran Хотя вы правы, и его пример неверен, он тоже прав. Его проблема заключается в добавлении метки на заставку, и вы бы не сделали это для заставки, а просто пометили ее названием приложения. Тем не менее, ярлык для всего приложения определяет заголовок, который дается программе запуска, если она установлена
Pazuzu156

1
Это должен быть лучший ответ.
MaXi32

24

Если вы хотите сделать это один раз и позволить системе обрабатывать все остальное (не динамически), сделайте так в файле манифеста:

<application
        android:allowBackup="true"
        android:icon="@drawable/ic_launcher"
        android:label="@string/app_name"
        android:theme="@style/AppTheme" >
        <activity
            android:name=".MainActivity"
            android:label="@string/app_name_full" > //This is my custom title name on activity. <- The question is about this one.
            <intent-filter android:label="@string/app_launcher_name" > //This is my custom Icon title name (launcher name that you see in android apps/homescreen)
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
    </application>

14
setTitle(getResources().getText(R.string.MyTitle));

@ Sujay да, вы можете, вот и вы: try {int labelRes = getPackageManager (). GetActivityInfo (getComponentName (), 0) .labelRes; Logger.d (this.getClass (). GetSimpleName (), "labelRes:" + labelRes); if (labelRes> 0 && getSupportActionBar ()! = null) {getSupportActionBar (). setTitle (labelRes); }} catch (PackageManager.NameNotFoundException исключение) {Logger.d (this.getClass (). getSimpleName (), "ловить исключение:" + Log.getStackTraceString (исключение)); }
user1510006

9

Это сработало для меня.

public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState) {
    View v = inflater.inflate(R.layout.fragment, container, false);
    getActivity().setTitle("My Title");
//...
}

7

Есть более быстрый способ, просто используйте

YourActivity.setTitle("New Title");

Вы также можете найти его внутри onCreate () , например:

public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        this.setTitle("My Title");
    }

Кстати, то, что вы просто не можете сделать, это вызвать setTitle () статическим способом без передачи какого-либо объекта Activity.


это не работает, если нажать кнопку режима ожидания и снова активировать экран. Название не обновляется. Любые идеи?
Джим Клермонтс

Это потому, что onCreate () не будет вызываться в вашем примере. Вам следует рассмотреть возможность использования другого обработчика событий, такого как onResume (). Я предлагаю вам посмотреть эту ссылку: developer.android.com/guide/components/activities/…
Defrag

4

Если у вас есть несколько действий, вы можете установить это в AndroidManifest.xml

<application
    android:allowBackup="true"
    android:icon="@mipmap/ic_launcher"
    android:label="@string/app_name"
    android:supportsRtl="true"
    android:theme="@style/AppTheme">
    <activity android:name=".MainActivity">
        <intent-filter>
            <action android:name="android.intent.action.MAIN" />

            <category android:name="android.intent.category.LAUNCHER" />
        </intent-filter>
    </activity>
    <activity
        android:name=".NumbersActivity"
        android:label="@string/category_numbers"
        android:theme="@style/category_numbers" />
    <activity
        android:name=".FamilyActivity"
        android:label="@string/category_family"
        android:theme="@style/category_family" />
    <activity
        android:name=".ColorsActivity"
        android:label="@string/category_colors"
        android:theme="@style/category_colors" />
    <activity
        android:name=".PhrasesActivity"
        android:label="@string/category_phrases"
        android:theme="@style/category_phrases" />
    <activity
        android:name=".ExperimentActivity"
        android:label="@string/category_experiment"
        android:theme="@style/category_experiment" />
</application>

я сделал именно так, это не сработало. на каждом мероприятии я вижу только имя приложения. Невозможно изменить это.
Прошло

2

Я использую Android Studio 3.0.1.

С деятельностью:

setTitle("Title Text");

Внутри фрагмент:

getActivity().setTitle("Title Text");


1

Если вы хотите установить заголовок в Java-файле, то напишите в своей деятельности onCreate

setTitle("Your Title");

если хочешь в манифест то пиши

    <activity
        android:name=".MainActivity"
        android:label="Your Title" >
        <intent-filter>
            <action android:name="android.intent.action.MAIN" />

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

1

У меня есть панель инструментов в моей деятельности и базовая активность, которая переопределяет все заголовки. Поэтому мне пришлось использовать setTitle в onResume () в Activity следующим образом:

@Override
  protected void onResume() {
    super.onResume();
    toolbar.setTitle(R.string.title);
  }

1

Код помог мне изменить название.

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_name);
    ActivityName.this.setTitle("Your Activity Title");}

0

Если вы хотите изменить заголовок действия при изменении действия, нажав на кнопку. Объявите необходимые переменные в MainActivity:

    private static final String TITLE_SIGN = "title_sign";
    ImageButton mAriesButton;

Добавьте onClickListener в onCreate () и создайте новое намерение для другого действия:

    mTitleButton = (ImageButton) findViewById(R.id.title_button);
    mTitleButton.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View view) {
        Intent intent = new Intent(MainActivity.this, 
        SignActivity.class);
        String title_act = getText(R.string.simple_text).toString();
        intent.putExtra("title_act", title_act);
        startActivity(intent);
        finish();
        }
    });

Код SecondActivity в onCreate ():

    String txtTitle = getIntent().getStringExtra("title_act");
    this.setTitle(txtTitle);

-1

Если вы используете onCreateOptionsMenu , вы можете также добавить SETTITLE код в onCreateOptionsMenu.

@Override
public boolean onCreateOptionsMenu(Menu menu) {
    MenuInflater inflater = getMenuInflater();
    inflater.inflate(R.menu.menu, menu);

    setTitle("Neue Aktivität");
    return true;
}
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.