จะเปลี่ยนชื่อกิจกรรมใน Android ได้อย่างไร?


227

ฉันใช้

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

เพื่อเปลี่ยนชื่อของกิจกรรมปัจจุบันของฉัน แต่ดูเหมือนจะไม่ทำงาน

ใครช่วยแนะนำฉันเกี่ยวกับวิธีการเปลี่ยนแปลงนี้ได้อย่างไร

คำตอบ:


498

ลอง setTitle ด้วยตัวเองเช่นนี้

setTitle("Hello StackOverflow");

1
setTitle ไม่ทำงานสำหรับฉัน, getSupportActionBar () และ getActionBar () ยังเป็นโมฆะด้วยฉันไม่สามารถตั้งชื่อใน runtime ได้
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

8
นี่เป็นวิธีที่ถูกต้องที่จะทำโดยการอ้างอิงไปยังสตริงภายนอกเพื่อเปิดใช้งานการโลคัลไลเซชันอย่างง่าย ควรเป็นคำตอบที่ได้รับการยอมรับ
Davor

10
มันไม่เหมือนกับ setTitle () การตั้งค่า android: คุณสมบัติป้ายกำกับของกิจกรรมตัวเรียกใช้จะเปลี่ยนชื่อแอปพลิเคชันบนหน้าจอแอปพลิเคชันของโทรศัพท์ ไอคอนแอปพลิเคชันของคุณจะมีคำอธิบายภาพ "ชื่อกิจกรรมของฉัน"
Doron Zehavi

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); }} 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 () ในแบบคงที่โดยไม่ผ่านวัตถุกิจกรรมใด ๆ


สิ่งนี้ไม่ทำงานเมื่อกดปุ่มสแตนด์บายและทำให้หน้าจอกลับมาทำงานอีกครั้ง ชื่อไม่อัปเดต ความคิดใด ๆ
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



1

หากคุณต้องการตั้งชื่อในไฟล์ Java ให้เขียนกิจกรรมของคุณบนสร้าง

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

ฉันมี Toolbar ในกิจกรรมและกิจกรรมพื้นฐานที่แทนที่ชื่อเรื่องทั้งหมด ดังนั้นฉันต้องใช้ 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;
}
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.