Як змінити назву діяльності в Android?


227

я використовую

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

змінити назву моєї поточної діяльності, але, схоже, це не працює.

Хтось може мене направляти, як це змінити?

Відповіді:


498

Спробуйте setTitle самостійно, як це:

setTitle("Hello StackOverflow");

1
setTitle не працює для мене, getSupportActionBar () і getActionBar () також недійсно встановлюю заголовок під час виконання.
Кодування ніндзя

1
@Ninja_Coding, спробуйте зателефонувати до цього пункту "Активність".
Джон Перрі

241

Просто FYI, ви можете це зробити з 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 (). Встановлення андроїд: властивість мітки активності запуску також змінить назву програми на екрані програм телефону. Піктограма вашої програми матиме підпис "Моя назва діяльності".
Дорон Зехаві

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 так, можна, ось ось: спробуйте {int labelRes = getPackageManager (). GetActivityInfo (getComponentName (), 0) .labelRes; Logger.d (this.getClass (). GetSimpleName (), "labelRes:" + labelRes); if (labelRes> 0 && getSupportActionBar ()! = null) {getSupportActionBar (). setTitle (labelRes); }} лов (виняток PackageManager.NameNotFoundException) {Logger.d (this.getClass (). getSimpleName (), "виняток викрадено:" + Log.getStackTraceString (виняток)); }
користувач1510006

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 () статичним способом, не передаючи жоден об'єкт діяльності.


це не працює, якщо натиснути кнопку очікування та знову активувати екран. Назва не оновлюється. Будь-які ідеї?
Джим Клермонц

Це тому, що 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");

якщо ви хочете в Manifest, тоді пишіть

    <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 () в діяльності як-небудь так:

@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.