如何在Android中更改活动标题?


227

我在用

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

更改我当前活动的标题,但似乎不起作用。

谁能指导我如何更改此设置?

Answers:


498

自己尝试setTitle,如下所示:

setTitle("Hello StackOverflow");

1
setTitle对我不起作用,getSupportActionBar()和getActionBar()也为空,我无法在运行时设置标题。
Ninja Coding

1
@Ninja_Coding,请尝试从活动中调用它。
John Perry

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 2013年

8
这几乎是最核心的方法,它引用外部字符串以实现轻松的本地化。应该接受答案。
Davor

10
它与setTitle()不同。设置启动器活动的android:label属性还将在手机的应用程序屏幕上更改应用程序的名称。您应用程序的图标将带有“我的活动标题”标题。
Doron Zehavi 2014年

2
@doran虽然您是正确的,但他的榜样在某种程度上是错误的,但他也是正确的。他的问题是在初始屏幕上添加标签,而您不会在初始屏幕上这样做,而只是用应用程序名称对其进行标签。但是,整个应用程序的标签是确定启动器标题(如果已设置)的原因
Pazuzu156

1
这应该是最好的答案。
MaXi32 '17

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); 如果(labelRes> 0 && getSupportActionBar()!= null){getSupportActionBar()。setTitle(labelRes); }} catch(PackageManager.NameNotFoundException异常){Logger.d(this.getClass()。getSimpleName(),“捕获到的异常:” + Log.getStackTraceString(exception)); }
user1510006 2009年

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对象。


当按下待机按钮并再次激活屏幕时,此功能不起作用。标题不会更新。有任何想法吗?
Jim Clermonts

这是因为在您的示例中不会调用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>

我完全是这样,它没有用。在每项活动中,我只会看到应用名称。无法更改。现在已经超过半小时了:(
krupesh Anadkat

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

我的活动中有一个工具栏,并且有一个覆盖所有标题的基本活动。所以我必须在Activity的onResume()中使用setTitle,如下所示:

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

在onCreate()中添加onClickListener并为另一个活动添加新意图:

    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();
        }
    });

onCreate()中的SecondActivity代码:

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

-1

如果您使用的是onCreateOptionsMenu,则还可以在onCreateOptionsMenu中添加setTitle代码。

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

    setTitle("Neue Aktivität");
    return true;
}
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.