Как изменить название 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.